builds the internal representation of the ABI and exits. This
option is usually useful for debugging purposes.
+ * ``--suppressions | suppr`` <*path-to-suppression-specifications-file*>
+
+ Use a :ref:`suppression specification <suppr_spec_label>` file
+ located at *path-to-suppression-specifications-file*. Note that
+ this option can appear multiple times on the command line. In
+ that case, all of the provided suppression specification files are
+ taken into account. ABI artifacts matched by the suppression
+ specifications are suppressed from the output of this tool.
+
+ * ``--headers-dir | --hd`` <headers-directory-path-1>
+
+ Specifies where to find the public headers of the first shared
+ library that the tool has to consider. The tool will thus filter
+ out types that are not defined in public headers.
+
* ``--check-alternate-debug-info`` <*elf-path*>
If the debug info for the file *elf-path* contains a reference to
Do not display anything on standard output. The return code of
the command is the only way to know if the command succeeded.
+ * ``--suppressions | suppr`` <*path-to-suppression-specifications-file*>
+
+ Use a :ref:`suppression specification <suppr_spec_label>` file
+ located at *path-to-suppression-specifications-file*. Note that
+ this option can appear multiple times on the command line. In
+ that case, all of the provided suppression specification files are
+ taken into account. ABI artifacts matched by the suppression
+ specifications are suppressed from the output of this tool.
+
+ * ``--headers-dir | --hd`` <headers-directory-path-1>
+
+ Specifies where to find the public headers of the first shared
+ library that the tool has to consider. The tool will thus filter
+ out types that are not defined in public headers.
+
* ``--stdin | --``
Read the input content from standard input.
program. Examples of ABI artifacts are exported types, variables,
functions, or `ELF`_ symbols exported by a shared library.
+The set of ABI artifact for a binary is called an ABI Corpus.
+
.. _harmfulchangeconcept_label:
Harmful changes
So, in short, to escape a character in a regular expression, always
prefix the character with the ``\\`` sequence.
+Modus operandi
+^^^^^^^^^^^^^^
+
+
+Suppression specifications can be applied at two different points of
+the processing pipeline of libabigail.
+
+.. _late_suppression_mode_label:
+
+In the default operating mode called "late suppression mode",
+suppression specifications are applied to the result of comparing the
+in-memory internal representations of two ABIs. In this mode, if an
+ABI artifact matches a suppression specification, its changes are not
+mentioned in the ABI change report. The internal representation of
+the "suppressed" changed ABI artifact is still present in memory; it
+is just not mentioned in the ABI change report. The change report can
+still mention statistics about the number of changed ABI artifacts
+that were suppressed.
+
+.. _early_suppression_mode_label:
+
+There is another operating mode called the "early suppression mode"
+where suppression specifications are applied during the construction
+of the in-memory internal representation of a given ABI. In that
+mode, if an ABI artifact matches a suppression specification, no
+in-memory internal representation is built for it. As a result, no
+change about the matched ABI artifact is going to be mentioned in the
+ABI change report and no statistic about the number of suppressed ABI
+changes is available. Also, please note that because suppressed ABI
+artifacts are removed from the in-memory internal representation in
+this mode, the amount memory used by the internal representation is
+potentially smaller than the memory consumption in the late
+suppression mode.
+
Sections
^^^^^^^^
types accessed either directly or through pointers
<example_accessed_through_label>`.
+* ``drop``
+
+ Usage:
+
+ ``drop`` ``=`` yes | no
+
+ If a type is matched by a suppression specification which contains
+ the "drop" property set to "yes" (or to "true") then the type is not
+ even going to be represented in the internal representation of the
+ ABI being analyzed. This property makes its enclosing suppression
+ specification to be applied in the :ref:`early suppression
+ specification mode <early_suppression_mode_label>`. The net effect
+ is that it potentially reduces the memory used to represent the ABI
+ being analyzed.
+
+ Please note that for this property to be effective, the enclosing
+ suppression specification must have at least one of the following
+ properties specified: ``name_regexp``, ``name``, ``name_regexp``,
+ ``source_location_not_in`` or ``source_location_not_regexp``.
+
.. _suppr_label_property_label:
* ``label``
``label``, ``file_name_regexp``, ``file_name_not_regexp``,
``soname_regexp``, ``soname_not_regexp``, ``name``, ``name_regexp``,
- ``parameter``, ``return_type_name``, ``symbol_name``,
- ``symbol_name_regexp``, ``symbol_version``,
+ ``name_not_regexp``, ``parameter``, ``return_type_name``,
+ ``symbol_name``, ``symbol_name_regexp``, ``symbol_version``,
``symbol_version_regexp``.
If none of the following properties are provided, then the
all of the aliases of the function for the directive to actually
suppress the diff reports for said function.
+
+* ``name_not_regexp``
+
+ Usage:
+
+ ``name_not_regexp`` ``=`` <:ref:`regular-expression <suppr_regexp_label>`>
+
+ Suppresses change reports involving functions whose names don't match
+ the regular expression specified as value of this property.
+
+ The rules for functions that have several symbol names are the same
+ rules as for the ``name_regexp`` property above.
+
.. _suppr_change_kind_property_label:
Suppresses change reports involving functions whose symbol version
matches the regular expression specified as value of this property.
+* ``drop``
+
+ Usage:
+
+ ``drop`` ``=`` yes | no
+
+ If a function is matched by a suppression specification which
+ contains the "drop" property set to "yes" (or to "true") then the
+ function is not even going to be represented in the internal
+ representation of the ABI being analyzed. This property makes its
+ enclosing suppression specification to be applied in the :ref:`early
+ suppression specification mode <early_suppression_mode_label>`. The
+ net effect is that it potentially reduces the memory used to
+ represent the ABI being analyzed.
+
+ Please note that for this property to be effective, the enclosing
+ suppression specification must have at least one of the following
+ properties specified: ``name_regexp``, ``name``, ``name_regexp``,
+ ``source_location_not_in`` or ``source_location_not_regexp``.
+
``[suppress_variable]``
$$$$$$$$$$$$$$$$$$$$$$$$
public:
- corpus(ir::environment*, const string&);
+ corpus(ir::environment*, const string& path= "");
const environment*
get_environment() const;
#include <ostream>
#include <elfutils/libdwfl.h>
#include "abg-corpus.h"
+#include "abg-suppression.h"
#ifndef __ABG_DWARF_READER_H__
#define __ABG_DWARF_READER_H__
ir::environment* environment,
bool read_all_types = false);
+void
+add_read_context_suppressions(read_context& ctxt,
+ const suppr::suppressions_type& supprs);
+
corpus_sptr
-read_corpus_from_elf(read_context& ctxt,
- status&);
+read_corpus_from_elf(read_context& ctxt, status& stat);
corpus_sptr
read_corpus_from_elf(const std::string& elf_path,
#include <istream>
#include "abg-corpus.h"
+#include "abg-suppression.h"
namespace abigail
{
read_translation_unit_from_istream(std::istream* in,
environment* env);
+class read_context;
+
+/// A convenience typedef for a shared pointer to read_context.
+typedef shared_ptr<read_context> read_context_sptr;
+
+read_context_sptr
+create_native_xml_read_context(const string& path, environment *env);
+
+read_context_sptr
+create_native_xml_read_context(std::istream* in, environment* env);
+
abigail::corpus_sptr
read_corpus_from_file(const string& path);
read_corpus_from_native_xml_file(const string& path,
environment* env);
+corpus_sptr
+read_corpus_from_input(read_context& ctxt);
+
+void
+add_read_context_suppressions(read_context& ctxt,
+ const suppr::suppressions_type& supprs);
+
}//end xml_reader
}//end namespace abigail
// Forbid default constructor
suppression_base();
-protected:
+public:
priv_sptr priv_;
-public:
suppression_base(const string& label);
suppression_base(const string& label,
- const string& file_name_regex_str,
- const string& file_name_not_regex_str);
+ const string& file_name_regex_str,
+ const string& file_name_not_regex_str);
+
+ bool
+ get_drops_artifact_from_ir() const;
+
+ void
+ set_drops_artifact_from_ir(bool) const;
bool
get_is_artificial() const;
const string&
get_soname_not_regex_str() const;
- bool names_of_binaries_match(const diff_context& context) const;
-
- bool sonames_of_binaries_match(const diff_context& context) const;
-
virtual bool
suppresses_diff(const diff*) const = 0;
class priv;
typedef shared_ptr<priv> priv_sptr;
- priv_sptr priv_;
-
// Forbid this;
type_suppression();
public:
+ priv_sptr priv_;
+
/// The kind of the type the current type suppression is supposed to
/// be about.
enum type_kind
bool
suppresses_type(const type_base_sptr& type,
const diff_context_sptr& ctxt) const;
+
+ bool
+ suppresses_type(const type_base_sptr& type) const;
+
+ bool
+ suppresses_type(const type_base_sptr& type,
+ const scope_decl* type_scope) const;
}; // end type_suppression
type_suppression_sptr
/// the purpose of reporting.
class function_suppression : public suppression_base
{
- class priv;
+ struct priv;
typedef shared_ptr<priv> priv_sptr;
- priv_sptr priv_;
-
// Forbid this.
function_suppression();
public:
+ priv_sptr priv_;
class parameter_spec;
/// Convenience typedef for shared_ptr of @ref parameter_spec.
set_change_kind(change_kind k);
const string&
- get_function_name() const;
+ get_name() const;
+
+ void
+ set_name(const string&);
+
+ const string&
+ get_name_regex_str() const;
void
- set_function_name(const string&);
+ set_name_regex_str(const string&);
const string&
- get_function_name_regex_str() const;
+ get_name_not_regex_str() const;
void
- set_function_name_regex_str(const string&);
+ set_name_not_regex_str(const string&);
const string&
get_return_type_name() const;
{
public:
-
/// The kind of change the current variable suppression should apply
/// to.
enum change_kind
};
private:
- class priv;
+ struct priv;
typedef shared_ptr<priv> priv_sptr;
+public:
+
priv_sptr priv_;
-public:
variable_suppression(const string& label,
const string& name,
const string& name_regex_str,
void
set_name_regex_str(const string&);
+ const string&
+ get_name_not_regex_str() const;
+
+ void
+ set_name_not_regex_str(const string&);
+
const string&
get_symbol_name() const;
abg-corpus.cc \
abg-diff-utils.cc \
abg-comparison.cc \
+abg-suppression-priv.h \
abg-suppression.cc \
abg-comp-filter.cc \
abg-reader.cc \
#include <ostream>
#include <sstream>
+#include "abg-suppression-priv.h"
+
#include "abg-internal.h"
// <headers defining libabigail's API go under here>
ABG_BEGIN_EXPORT_DECLARATIONS
class read_context
{
environment* env_;
+ suppr::suppressions_type supprs_;
unsigned short dwarf_version_;
Dwfl_Callbacks offline_callbacks_;
dwfl_sptr handle_;
env(ir::environment* env)
{env_ = env;}
+ /// Getter of the suppression specifications to be used during
+ /// ELF/DWARF parsing.
+ ///
+ /// @return the suppression specifications.
+ const suppr::suppressions_type&
+ get_suppressions() const
+ {return supprs_;}
+
+ /// Getter of the suppression specifications to be used during
+ /// ELF/DWARF parsing.
+ ///
+ /// @return the suppression specifications.
+ suppr::suppressions_type&
+ get_suppressions()
+ {return supprs_;}
+
/// Getter for the callbacks of the Dwarf Front End library of
/// elfutils that is used by this reader to read dwarf.
///
/// @return true iff the source of the DIE could be determined and
/// returned.
bool
- get_die_source(Dwarf_Die *die, die_source &source)
+ get_die_source(Dwarf_Die *die, die_source &source) const
{
assert(die);
return get_die_source(*die, source);
/// @return true iff the source of the DIE could be determined and
/// returned.
bool
- get_die_source(Dwarf_Die &die, die_source &source)
+ get_die_source(Dwarf_Die &die, die_source &source) const
{
Dwarf_Die cu_die;
Dwarf_Die cu_kind;
die_tu_map()
{return die_tu_map_;}
+ /// Getter for the map that associates a translation unit DIE to the
+ /// vector of imported unit points that it contains.
+ ///
+ /// @param source where the DIEs are from.
+ ///
+ /// @return the map.
+ const tu_die_imported_unit_points_map_type&
+ tu_die_imported_unit_points_map(die_source source) const
+ {return const_cast<read_context*>(this)->tu_die_imported_unit_points_map(source);}
+
/// Getter for the map that associates a translation unit DIE to the
/// vector of imported unit points that it contains.
///
type_section_die_parent_map()
{return type_section_die_parent_map_;}
+ /// Getter of the current translation unit.
+ ///
+ /// @return the current translation unit being constructed.
const translation_unit_sptr
- current_translation_unit() const
+ cur_transl_unit() const
{return cur_tu_;}
- translation_unit_sptr
- cur_tu()
+ /// Getter of the current translation unit.
+ ///
+ /// @return the current translation unit being constructed.
+ translation_unit_sptr&
+ cur_transl_unit()
{return cur_tu_;}
+ /// Setter of the current translation unit.
+ ///
+ /// @param tu the current translation unit being constructed.
void
- cur_tu(translation_unit_sptr tu)
+ cur_transl_unit(translation_unit_sptr tu)
{
if (tu)
cur_tu_ = tu;
{
if (scope_stack().empty())
{
- if (cur_tu())
- scope_stack().push
- (cur_tu()->get_global_scope().get());
+ if (cur_transl_unit())
+ scope_stack().push(cur_transl_unit()->get_global_scope().get());
}
return scope_stack().top();
}
return true;
}
+ /// Tests if a suppression specification can match ABI artifacts
+ /// coming from the binary being analyzed.
+ ///
+ /// This tests if the suppression matches the soname of and binary
+ /// name of the ELF binary being analyzed.
+ ///
+ /// @param s the suppression specification to consider.
+ bool
+ suppression_can_match(const suppr::suppression_base& s) const
+ {
+ if (s.priv_->matches_soname(dt_soname())
+ && s.priv_->matches_binary_name(elf_path()))
+ return true;
+ return false;
+ }
+
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its linkage
+ /// name (symbol name).
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function linkage name
+ ///
+ /// @param fn_linkage_name the linkage name of the function of interest.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose linkage name is @p fn_linkage_name.
+ bool
+ suppression_matches_function_sym_name(const suppr::function_suppression_sptr& s,
+ const string& fn_linkage_name) const
+ {
+ if (!s)
+ return false;
+ return suppression_matches_function_sym_name(*s,fn_linkage_name);
+ }
+
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its linkage
+ /// name (symbol name).
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function linkage name
+ ///
+ /// @param fn_linkage_name the linkage name of the function of interest.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose linkage name is @p fn_linkage_name.
+ bool
+ suppression_matches_function_sym_name(const suppr::function_suppression& s,
+ const string& fn_linkage_name) const
+ {
+ if (!suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_function_sym_name(s, fn_linkage_name);
+ }
+
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its name.
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function name.
+ ///
+ /// @param fn_name the name of the function of interest. Note that
+ /// this name must be *non* qualified.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose name is @p fn_name.
+ bool
+ suppression_matches_function_name(const suppr::function_suppression_sptr& s,
+ const string& fn_name) const
+ {
+ if (!s)
+ return false;
+ return suppression_matches_function_name(*s, fn_name);
+ }
+
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its name.
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function name.
+ ///
+ /// @param fn_name the name of the function of interest. Note that
+ /// this name must be *non* qualified.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose name is @p fn_name.
+ bool
+ suppression_matches_function_name(const suppr::function_suppression& s,
+ const string& fn_name) const
+ {
+ if (!suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_function_name(s, fn_name);
+ }
+
+ /// Test whether if a given variable suppression specification
+ /// matches a variable denoted by its name.
+ ///
+ /// @param s the variable suppression specification to consider.
+ ///
+ /// @param var_name the name of the variable to consider.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// variable whose name is @p var_name.
+ bool
+ suppression_matches_variable_name(const suppr::variable_suppression& s,
+ const string& var_name) const
+ {
+ if (!suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_variable_name(s, var_name);
+ }
+
+ /// Test whether if a given variable suppression specification
+ /// matches a variable denoted by its linkage name.
+ ///
+ /// @param s the variable suppression specification to consider.
+ ///
+ /// @param var_linkage_name the linkage name of the variable to consider.
+ ///
+ /// @return true iff variable suppression specification @p s matches
+ /// the variable denoted by linkage name @p var_linkage_name.
+ bool
+ suppression_matches_variable_sym_name(const suppr::variable_suppression& s,
+ const string& var_linkage_name) const
+ {
+ if (!suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_variable_sym_name(s, var_linkage_name);
+ }
+
+ /// Test if a given type suppression specification matches a type
+ /// designated by its name and location.
+ ///
+ /// @param s the suppression specification to consider.
+ ///
+ /// @param type_name the fully qualified type name to consider.
+ ///
+ /// @param type_location the type location to consider.
+ ///
+ /// @return true iff the type suppression specification matches a
+ /// type of a given name and location.
+ bool
+ suppression_matches_type_name_or_location(const suppr::type_suppression& s,
+ const string& type_name,
+ const location& type_location) const
+ {
+ if (!suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_type_name_or_location(s, type_name,
+ type_location);
+ }
+
+ /// Test if a type suppression specification matches the name of a
+ /// type within a given scope.
+ ///
+ /// @param s the type suppression specification to consider.
+ ///
+ /// @param type_scope the type scope to consider.
+ ///
+ /// @param type the type to consider.
+ ///
+ /// @return true iff the type suppression specification matches a
+ /// the name of type @p type.
+ bool
+ suppression_matches_type_name(const suppr::type_suppression& s,
+ const scope_decl* type_scope,
+ const type_base_sptr& type) const
+ {
+ if (!suppression_can_match(s))
+ return false;
+ return suppr::suppression_matches_type_name(s, type_scope, type);
+ }
+
/// Getter of the exported decls builder object.
///
/// @return the exported decls builder.
size_t where_offset,
function_decl_sptr fn);
+static var_decl_sptr
+build_var_decl(read_context& ctxt,
+ Dwarf_Die *die,
+ size_t where_offset,
+ var_decl_sptr result = var_decl_sptr());
+
+static bool
+variable_is_suppressed(const read_context& ctxt,
+ const scope_decl* scope,
+ Dwarf_Die *variable_die);
+
static void
finish_member_function_reading(Dwarf_Die* die,
function_decl_sptr f,
return true;
}
-#if 0
-/// Get the value of an attribute that is supposed to be a signed
-/// constant.
-///
-///@param die the DIE to read the information from.
-///
-/// @param attr_name the DW_AT_* name of the attribute. Must come
-/// from dwarf.h and be an enumerator representing an attribute like,
-/// e.g, DW_AT_decl_line.
-///
-///@param cst the output parameter that is set to the value of the
-/// attribute @p attr_name. This parameter is set iff the function
-/// return true.
-///
-/// @return true if there was an attribute of the name @p attr_name
-/// and with a value that is a constant, false otherwise.
-static bool
-die_signed_constant_attribute(Dwarf_Die* die,
- unsigned attr_name,
- int64_t& cst)
-{
- if (!die)
- return false;
-
- Dwarf_Attribute attr;
- Dwarf_Sword result = 0;
- if (!dwarf_attr_integrate(die, attr_name, &attr)
- || dwarf_formsdata(&attr, &result))
- return false;
-
- cst = result;
- return true;
-}
-#endif
-
/// Get the value of a DIE attribute; that value is meant to be a
/// flag.
///
/// @param ctxt the @ref read_context to use.
///
/// @param die the DIE the read the source location from.
+///
+/// @return the location associated with @p die.
static location
-die_location(read_context& ctxt, Dwarf_Die* die)
+die_location(const read_context& ctxt, Dwarf_Die* die)
{
if (!die)
return location();
if (!file.empty() && line != 0)
{
- translation_unit_sptr tu = ctxt.cur_tu();
+ translation_unit_sptr tu = ctxt.cur_transl_unit();
location l = tu->get_loc_mgr().create_new_location(file, line, 1);
return l;
}
///
/// @param linkage_name the linkage_name output parameter to set.
static void
-die_loc_and_name(read_context& ctxt,
- Dwarf_Die* die,
- location& loc,
- string& name,
- string& linkage_name)
+die_loc_and_name(const read_context& ctxt,
+ Dwarf_Die* die,
+ location& loc,
+ string& name,
+ string& linkage_name)
{
loc = die_location(ctxt, die);
name = die_string_attribute(die, DW_AT_name);
/// @return true iff an imported unit is found between @p
/// first_die_offset and @p last_die_offset.
static bool
-find_import_unit_point_between_dies(read_context& ctxt,
+find_import_unit_point_between_dies(const read_context& ctxt,
size_t partial_unit_offset,
Dwarf_Off first_die_offset,
Dwarf_Off first_die_cu_offset,
size_t last_die_offset,
size_t& imported_point_offset)
{
- tu_die_imported_unit_points_map_type& tu_die_imported_unit_points_map =
+ const tu_die_imported_unit_points_map_type& tu_die_imported_unit_points_map =
ctxt.tu_die_imported_unit_points_map(source);
- tu_die_imported_unit_points_map_type::iterator iter =
+ tu_die_imported_unit_points_map_type::const_iterator iter =
tu_die_imported_unit_points_map.find(first_die_cu_offset);
assert(iter != tu_die_imported_unit_points_map.end());
- imported_unit_points_type& imported_unit_points = iter->second;
+ const imported_unit_points_type& imported_unit_points = iter->second;
if (imported_unit_points.empty())
return false;
/// Note that if an imported unit is found after @p die_offset then @p
/// imported_point_offset is set and the function return false.
static bool
-find_import_unit_point_before_die(read_context& ctxt,
+find_import_unit_point_before_die(const read_context& ctxt,
size_t partial_unit_offset,
size_t where_offset,
size_t& imported_point_offset)
/// @return true if the function could get a parent DIE, false
/// otherwise.
static bool
-get_parent_die(read_context& ctxt,
- Dwarf_Die* die,
- Dwarf_Die& parent_die,
- size_t where_offset)
+get_parent_die(const read_context& ctxt,
+ Dwarf_Die* die,
+ Dwarf_Die& parent_die,
+ size_t where_offset)
{
assert(ctxt.dwarf());
{
assert(source_of_die == ALT_DEBUG_INFO_DIE_SOURCE
|| source_of_die == TYPE_UNIT_DIE_SOURCE);
- return ctxt.cur_tu()->get_global_scope();
+ return ctxt.cur_transl_unit()->get_global_scope();
}
// For top level DIEs like DW_TAG_compile_unit, we just want to
result->set_language(dwarf_language_to_tu_language(l));
ctxt.current_corpus()->add(result);
- ctxt.cur_tu(result);
+ ctxt.cur_transl_unit(result);
ctxt.die_tu_map()[dwarf_dieoffset(die)] = result;
Dwarf_Die child;
if (!fqn_comps.empty())
{
ty_name = components_to_type_name(fqn_comps);
- ty_decl = lookup_type_in_translation_unit(ty_name,
- *ctxt.cur_tu());
+ ty_decl =
+ lookup_type_in_translation_unit(ty_name,
+ *ctxt.cur_transl_unit());
}
if (class_decl_sptr cl = dynamic_pointer_cast<class_decl>(ty_decl))
{
type_decl_sptr t(new type_decl(ctxt.env(), underlying_type_name,
size, size, location()));
t->set_is_anonymous(enum_underlying_type_is_anonymous);
- translation_unit_sptr tu = ctxt.cur_tu();
+ translation_unit_sptr tu = ctxt.cur_transl_unit();
decl_base_sptr d =
add_decl_to_scope(t, tu->get_global_scope().get());
canonicalize(t);
if (lookup_var_decl_in_scope(n, result))
continue;
- decl_base_sptr ty = is_decl(
- build_ir_node_from_die(ctxt, &type_die,
- called_from_public_decl,
- where_offset));
- type_base_sptr t = is_type(ty);
- if (!t)
- continue;
-
ssize_t offset_in_bits = 0;
bool is_laid_out = false;
is_laid_out = die_member_offset(&child, offset_in_bits);
// templates, we'll try to be more specific. For now,
// this approximation should do OK.
bool is_static = !is_laid_out;
+
+ if (is_static && variable_is_suppressed(ctxt,
+ result.get(),
+ &child))
+ continue;
+
+ decl_base_sptr ty = is_decl(
+ build_ir_node_from_die(ctxt, &type_die,
+ called_from_public_decl,
+ where_offset));
+ type_base_sptr t = is_type(ty);
+ if (!t)
+ continue;
+
if (!is_static)
// We have a non-static data member. So this class
// cannot be a declaration-only class anymore, even if
// if the DIE for the pointer type doesn't have a byte_size
// attribute then we assume the size of the pointer is the address
// size of the current translation unit.
- uint64_t size = ctxt.cur_tu()->get_address_size();
+ uint64_t size = ctxt.cur_transl_unit()->get_address_size();
if (die_unsigned_constant_attribute(die, DW_AT_byte_size, size))
// The size as expressed by DW_AT_byte_size is in byte, so let's
// convert it to bits.
// And the size of the pointer must be the same as the address size
// of the current translation unit.
- assert((size_t) ctxt.cur_tu()->get_address_size() == size);
+ assert((size_t) ctxt.cur_transl_unit()->get_address_size() == size);
result.reset(new pointer_type_def(utype, size, /*alignment=*/0, location()));
assert(result->get_pointed_to_type());
// if the DIE for the reference type doesn't have a byte_size
// attribute then we assume the size of the reference is the address
// size of the current translation unit.
- uint64_t size = ctxt.cur_tu()->get_address_size();
+ uint64_t size = ctxt.cur_transl_unit()->get_address_size();
if (die_unsigned_constant_attribute(die, DW_AT_byte_size, size))
size *= 8;
// And the size of the pointer must be the same as the address size
// of the current translation unit.
- assert((size_t) ctxt.cur_tu()->get_address_size() == size);
+ assert((size_t) ctxt.cur_transl_unit()->get_address_size() == size);
bool is_lvalue = (tag == DW_TAG_reference_type) ? true : false;
decl_base_sptr type_decl;
- translation_unit_sptr tu = ctxt.cur_tu();
+ translation_unit_sptr tu = ctxt.cur_transl_unit();
assert(tu);
// The call to build_ir_node_from_die() could have triggered the
Dwarf_Die child;
array_type_def::subranges_type subranges;
translation_unit::language language =
- ctxt.current_translation_unit()->get_language();
+ ctxt.cur_transl_unit()->get_language();
uint64_t upper_bound = 0;
uint64_t lower_bound = get_default_array_lower_bound(language);
uint64_t count = 0;
return result;
}
+/// Build a @ref var_decl out of a DW_TAG_variable DIE iff the
+/// variable denoted by the DIE is not suppressed by a suppression
+/// specification associated to the current read context.
+///
+/// @param ctxt the read context to use.
+///
+/// @param die the DIE representing the variable we are looking at.
+///
+/// @param where_offset the offset of the DIE where we are "logically"
+/// positionned at, in the DIE tree. This is useful when @p die is
+/// e.g, DW_TAG_partial_unit that can be included in several places in
+/// the DIE tree.
+///
+/// @param result if this is set to an existing var_decl, this means
+/// that the function will append the new properties it sees on @p die
+/// to that exising var_decl. Otherwise, if this parameter is NULL, a
+/// new var_decl is going to be allocated and returned.
+///
+/// @return a pointer to the newly created var_decl. If the var_decl
+/// could not be built, this function returns NULL.
+static var_decl_sptr
+build_var_decl_if_not_suppressed(read_context& ctxt,
+ scope_decl *scope,
+ Dwarf_Die *die,
+ size_t where_offset,
+ var_decl_sptr result = var_decl_sptr())
+{
+ var_decl_sptr var;
+ if (!variable_is_suppressed(ctxt, scope, die))
+ var = build_var_decl(ctxt, die, where_offset, result);
+ return var;
+}
+
/// Build a @ref var_decl out of a DW_TAG_variable DIE.
///
/// @param ctxt the read context to use.
build_var_decl(read_context& ctxt,
Dwarf_Die *die,
size_t where_offset,
- var_decl_sptr result = var_decl_sptr())
+ var_decl_sptr result)
{
if (!die)
return result;
return result;
}
+/// Test if a given function denoted by its DIE and its scope is
+/// suppressed by any of the suppression specifications associated to
+/// a given context of ELF/DWARF reading.
+///
+/// @param ctxt the ELF/DWARF reading content of interest.
+///
+/// @param scope of the scope of the function.
+///
+/// @param function_die the DIE representing the function.
+///
+/// @return true iff @p function_die is suppressed by at least one
+/// suppression specification attached to the @p ctxt.
+static bool
+function_is_suppressed(const read_context& ctxt,
+ const scope_decl* scope,
+ Dwarf_Die *function_die)
+{
+ if (function_die == 0
+ || dwarf_tag(function_die) != DW_TAG_subprogram)
+ return false;
+
+ string fname = die_string_attribute(function_die, DW_AT_name);
+ string flinkage_name = die_linkage_name(function_die);
+ string qualified_name = build_qualified_name(scope, fname);
+
+ return suppr::function_is_suppressed(ctxt, qualified_name,
+ flinkage_name,
+ /*require_drop_property=*/true);
+}
+
+/// Test if a given variable denoted by its DIE and its scope is
+/// suppressed by any of the suppression specifications associated to
+/// a given context of ELF/DWARF reading.
+///
+/// @param ctxt the ELF/DWARF reading content of interest.
+///
+/// @param scope of the scope of the variable.
+///
+/// @param variable_die the DIE representing the variable.
+///
+/// @return true iff @p variable_die is suppressed by at least one
+/// suppression specification attached to the @p ctxt.
+static bool
+variable_is_suppressed(const read_context& ctxt,
+ const scope_decl* scope,
+ Dwarf_Die *variable_die)
+{
+ if (variable_die == 0
+ || (dwarf_tag(variable_die) != DW_TAG_variable
+ && dwarf_tag(variable_die) != DW_TAG_member))
+ return false;
+
+ string name = die_string_attribute(variable_die, DW_AT_name);
+ string linkage_name = die_linkage_name(variable_die);
+ string qualified_name = build_qualified_name(scope, name);
+
+ return suppr::variable_is_suppressed(ctxt, qualified_name,
+ linkage_name,
+ /*require_drop_property=*/true);
+}
+
+/// Test if a type (designated by a given DIE) in a given scope is
+/// suppressed by the suppression specifications that are associated
+/// to a given read context.
+///
+/// @param ctxt the read context to consider.
+///
+/// @param scope of the scope of the type DIE to consider.
+///
+/// @param type_die the DIE that designates the type to consider.
+///
+/// @return true iff the type designated by the DIE @p type_die, in
+/// the scope @p scope is suppressed by at the suppression
+/// specifications associated to the current read context.
+static bool
+type_is_suppressed(const read_context& ctxt,
+ const scope_decl* scope,
+ Dwarf_Die *type_die)
+{
+ if (type_die == 0
+ || (dwarf_tag(type_die) != DW_TAG_enumeration_type
+ && dwarf_tag(type_die) != DW_TAG_class_type
+ && dwarf_tag(type_die) != DW_TAG_structure_type))
+ return false;
+
+ string type_name, linkage_name;
+ location type_location;
+ die_loc_and_name(ctxt, type_die, type_location, type_name, linkage_name);
+ string qualified_name = build_qualified_name(scope, type_name);
+
+ return suppr::type_is_suppressed(ctxt, qualified_name,
+ type_location,
+ /*require_drop_property=*/true);
+}
+
/// Build a @ref function_decl our of a DW_TAG_subprogram DIE.
///
/// @param ctxt the read context to use
if (!die_is_public_decl(die))
return result;
- translation_unit_sptr tu = ctxt.cur_tu();
+ translation_unit_sptr tu = ctxt.cur_transl_unit();
assert(tu);
string fname, flinkage_name;
case DW_TAG_base_type:
if (type_decl_sptr t = build_type_decl(ctxt, die))
{
- result = add_decl_to_scope(t, ctxt.cur_tu()->get_global_scope());
+ result =
+ add_decl_to_scope(t, ctxt.cur_transl_unit()->get_global_scope());
canonicalize(t);
}
break;
where_offset);
if (p)
{
- result = add_decl_to_scope(p, ctxt.cur_tu()->get_global_scope());
+ result =
+ add_decl_to_scope(p, ctxt.cur_transl_unit()->get_global_scope());
assert(result->get_translation_unit());
maybe_canonicalize_type(dwarf_dieoffset(die), source_of_die, ctxt);
}
where_offset);
if (r)
{
- result = add_decl_to_scope(r, ctxt.cur_tu()->get_global_scope());
+ result =
+ add_decl_to_scope(r, ctxt.cur_transl_unit()->get_global_scope());
ctxt.associate_die_to_type(dwarf_dieoffset(die), source_of_die, r);
maybe_canonicalize_type(dwarf_dieoffset(die), source_of_die, ctxt);
}
// different from 'q', because 'ty' is 'q' possibly
// stripped from some redundant type qualifier.
ctxt.associate_die_to_type(dwarf_dieoffset(die), source_of_die, ty);
- result = add_decl_to_scope(d, ctxt.cur_tu()->get_global_scope());
+ result =
+ add_decl_to_scope(d, ctxt.cur_transl_unit()->get_global_scope());
maybe_canonicalize_type(dwarf_dieoffset(die), source_of_die, ctxt);
}
}
case DW_TAG_enumeration_type:
{
- enum_type_decl_sptr e = build_enum_type(ctxt, die);
- result = add_decl_to_scope(e, scope);
- if (result)
+ if (!type_is_suppressed(ctxt, scope, die))
{
- maybe_set_member_type_access_specifier(is_decl(result), die);
- maybe_canonicalize_type(dwarf_dieoffset(die), source_of_die, ctxt);
+ enum_type_decl_sptr e = build_enum_type(ctxt, die);
+ result = add_decl_to_scope(e, scope);
+ if (result)
+ {
+ maybe_set_member_type_access_specifier(is_decl(result), die);
+ maybe_canonicalize_type(dwarf_dieoffset(die),
+ source_of_die, ctxt);
+ }
}
}
break;
case DW_TAG_class_type:
case DW_TAG_structure_type:
{
- Dwarf_Die spec_die;
- scope_decl_sptr scop;
- class_decl_sptr klass;
- if (die_die_attribute(die, DW_AT_specification, spec_die))
+ if (!type_is_suppressed(ctxt, scope, die))
{
- scope_decl_sptr skope = get_scope_for_die(ctxt, &spec_die,
- called_from_public_decl,
- where_offset);
- assert(skope);
- decl_base_sptr cl =
- is_decl(build_ir_node_from_die(ctxt, &spec_die,
- skope.get(),
- called_from_public_decl,
- where_offset));
- assert(cl);
- klass = dynamic_pointer_cast<class_decl>(cl);
- assert(klass);
-
- klass =
- build_class_type_and_add_to_ir(ctxt, die,
- skope.get(),
- tag == DW_TAG_structure_type,
- klass,
- called_from_public_decl,
- where_offset);
- }
- else
- klass =
- build_class_type_and_add_to_ir(ctxt, die,
- scope, tag == DW_TAG_structure_type,
- class_decl_sptr(),
- called_from_public_decl,
- where_offset);
- result = klass;
- if (klass)
- {
- maybe_set_member_type_access_specifier(klass, die);
- maybe_canonicalize_type(dwarf_dieoffset(die), source_of_die, ctxt);
+ Dwarf_Die spec_die;
+ scope_decl_sptr scop;
+ class_decl_sptr klass;
+ if (die_die_attribute(die, DW_AT_specification, spec_die))
+ {
+ scope_decl_sptr skope =
+ get_scope_for_die(ctxt, &spec_die,
+ called_from_public_decl,
+ where_offset);
+ assert(skope);
+ decl_base_sptr cl =
+ is_decl(build_ir_node_from_die(ctxt, &spec_die,
+ skope.get(),
+ called_from_public_decl,
+ where_offset));
+ assert(cl);
+ klass = dynamic_pointer_cast<class_decl>(cl);
+ assert(klass);
+
+ klass =
+ build_class_type_and_add_to_ir(ctxt, die,
+ skope.get(),
+ tag == DW_TAG_structure_type,
+ klass,
+ called_from_public_decl,
+ where_offset);
+ }
+ else
+ klass =
+ build_class_type_and_add_to_ir(ctxt, die, scope,
+ tag == DW_TAG_structure_type,
+ class_decl_sptr(),
+ called_from_public_decl,
+ where_offset);
+ result = klass;
+ if (klass)
+ {
+ maybe_set_member_type_access_specifier(klass, die);
+ maybe_canonicalize_type(dwarf_dieoffset(die),
+ source_of_die, ctxt);
+ }
}
}
break;
where_offset);
if (a)
{
- result = add_decl_to_scope(a, ctxt.cur_tu()->get_global_scope());
+ result =
+ add_decl_to_scope(a, ctxt.cur_transl_unit()->get_global_scope());
ctxt.associate_die_to_type(dwarf_dieoffset(die), source_of_die, a);
maybe_canonicalize_type(dwarf_dieoffset(die), source_of_die, ctxt);
}
|| (var_is_cloned = die_die_attribute(die, DW_AT_abstract_origin,
spec_die, false)))
{
- scope_decl_sptr scop = get_scope_for_die(ctxt, &spec_die,
- called_from_public_decl,
- where_offset);
- if (scop)
+ scope_decl_sptr spec_scope = get_scope_for_die(ctxt, &spec_die,
+ called_from_public_decl,
+ where_offset);
+ if (spec_scope)
{
decl_base_sptr d =
is_decl(build_ir_node_from_die(ctxt, &spec_die,
- scop.get(),
+ spec_scope.get(),
called_from_public_decl,
where_offset));
if (d)
}
}
}
- else if (var_decl_sptr v = build_var_decl(ctxt, die, where_offset))
+ else if (var_decl_sptr v =
+ build_var_decl_if_not_suppressed(ctxt, scope, die,
+ where_offset))
{
result = add_decl_to_scope(v, scope);
assert(is_decl(result)->get_scope());
Dwarf_Die spec_die;
Dwarf_Die abstract_origin_die;
Dwarf_Die *interface_die = 0, *origin_die = 0;
- scope_decl_sptr scop;
+ scope_decl_sptr interface_scope;
if (die_is_artificial(die))
break;
string linkage_name = die_linkage_name(die);
string spec_linkage_name = die_linkage_name(interface_die);
- scop = get_scope_for_die(ctxt, interface_die,
- called_from_public_decl,
- where_offset);
- if (scop)
+ interface_scope = get_scope_for_die(ctxt, interface_die,
+ called_from_public_decl,
+ where_offset);
+ if (interface_scope)
{
decl_base_sptr d =
is_decl(build_ir_node_from_die(ctxt,
origin_die,
- scop.get(),
+ interface_scope.get(),
called_from_public_decl,
where_offset));
if (d)
}
ctxt.scope_stack().push(scope);
- result = build_function_decl(ctxt, die, where_offset, fn);
+ scope_decl* logical_scope =
+ interface_scope
+ ? interface_scope.get()
+ : scope;
+
+ if (function_is_suppressed(ctxt, logical_scope, die))
+ // The function has been suppressed by a suppression
+ // specification, Do not try to build an internal
+ // representation for it.
+ ;
+ else
+ result = build_function_decl(ctxt, die, where_offset, fn);
+
if (result && !fn)
result = add_decl_to_scope(is_decl(result), scope);
assert(env);
decl_base_sptr t = env->get_void_type_decl();
if (!has_scope(t))
- add_decl_to_scope(t, ctxt.cur_tu()->get_global_scope());
+ add_decl_to_scope(t, ctxt.cur_transl_unit()->get_global_scope());
canonicalize(is_type(t));
return t;
}
return result;
}
+/// Add suppressions specifications to the set of suppressions to be
+/// used during the construction of the ABI internal representation
+/// (the ABI corpus) from ELF and DWARF.
+///
+/// During the construction of the ABI corpus, ABI artifacts that
+/// match the a given suppression specification are dropped on the
+/// floor; that is, they are discarded and won't be part of the final
+/// ABI corpus. This is a way to reduce the amount of data held by
+/// the final ABI corpus.
+///
+/// Note that the suppression specifications provided to this function
+/// are only considered during the construction of the ABI corpus.
+/// For instance, they are not taken into account during e.g
+/// comparisons of two ABI corpora that might happen later. If you
+/// want to apply suppression specificatins to the comparison (or
+/// reporting) of ABI corpora please refer to the documentation of the
+/// @ref diff_context type to learn how to set suppressions that are
+/// to be used in that context.
+///
+/// @param ctxt the context that is going to be used by functions that
+/// read ELF and DWARF information to construct and ABI corpus.
+///
+/// @param supprs the suppression specifications to be applied during
+/// the construction of the ABI corpus.
+void
+add_read_context_suppressions(read_context& ctxt,
+ const suppr::suppressions_type& supprs)
+{
+ for (suppr::suppressions_type::const_iterator i = supprs.begin();
+ i != supprs.end();
+ ++i)
+ if ((*i)->get_drops_artifact_from_ir())
+ ctxt.get_suppressions().push_back(*i);
+}
+
/// Read all @ref abigail::translation_unit possible from the debug info
/// accessible from an elf file, stuff them into a libabigail ABI
/// Corpus and return it.
#include <libxml/xmlstring.h>
#include <libxml/xmlreader.h>
+#include "abg-suppression-priv.h"
+
#include "abg-internal.h"
// <headers defining libabigail's API go under here>
ABG_BEGIN_EXPORT_DECLARATIONS
typedef unordered_map<xmlNodePtr, decl_base_sptr> xml_node_decl_base_sptr_map;
private:
+ string m_path;
environment* m_env;
unordered_map<string, vector<type_base_sptr> > m_types_map;
unordered_map<string, shared_ptr<function_tdecl> > m_fn_tmpl_map;
xmlNodePtr m_corp_node;
deque<shared_ptr<decl_base> > m_decls_stack;
corpus_sptr m_corpus;
- corpus::exported_decls_builder* m_exported_decls_builder_;
+ corpus::exported_decls_builder* m_exported_decls_builder;
+ suppr::suppressions_type m_supprs;
read_context();
: m_env(env),
m_reader(reader),
m_corp_node(),
- m_exported_decls_builder_()
+ m_exported_decls_builder()
{}
+ /// Getter of the path to the ABI file.
+ ///
+ /// @return the path to the native xml abi file.
+ const string&
+ get_path() const
+ {return m_path;}
+
+ /// Setter of the path to the ABI file.
+ ///
+ /// @param the new path to the native ABI file.
+ void
+ set_path(const string& s)
+ {m_path = s;}
+
/// Getter for the environment of this reader.
///
/// @return the environment of this reader.
/// Return the current lexical scope.
scope_decl*
- get_cur_scope()
+ get_cur_scope() const
{
shared_ptr<decl_base> cur_decl = get_cur_decl();
/// @return the exported decls builder.
corpus::exported_decls_builder*
get_exported_decls_builder()
- {return m_exported_decls_builder_;}
+ {return m_exported_decls_builder;}
/// Setter for the object that determines if a given declaration
/// ought to be put in the set of exported decls of the current
/// @return the exported decls builder.
void
set_exported_decls_builder(corpus::exported_decls_builder* d)
- {m_exported_decls_builder_ = d;}
+ {m_exported_decls_builder = d;}
+
+ /// Getter of the vector of the suppression specifications
+ /// associated to the current read context.
+ ///
+ /// @return the vector of suppression specifications.
+ suppr::suppressions_type&
+ get_suppressions()
+ {return m_supprs;}
+
+ /// Getter of the vector of the suppression specifications
+ /// associated to the current read context.
+ ///
+ /// @return the vector of suppression specifications.
+ const suppr::suppressions_type&
+ get_suppressions() const
+ {return const_cast<read_context*>(this)->get_suppressions();}
/// Add a given function to the set of exported functions of the
/// current corpus, if the function satisfies the different
++i)
canonicalize(*i);
}
+
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its name.
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function name.
+ ///
+ /// @param fn_name the name of the function of interest. Note that
+ /// this name must be *non* qualified.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose name is @p fn_name.
+ bool
+ suppression_matches_function_name(const suppr::function_suppression_sptr& s,
+ const string& fn_name) const
+ {
+ if (!s)
+ return false;
+ return suppression_matches_function_name(*s, fn_name);
+ }
+
+ /// Tests if a suppression specification can match ABI artifacts
+ /// coming from the ABI corpus being analyzed.
+ ///
+ /// This tests if the suppression matches the soname of and binary
+ /// name of the corpus being analyzed.
+ ///
+ /// @param s the suppression specification to consider.
+ bool
+ suppression_can_match(const suppr::suppression_base& s) const
+ {
+ corpus_sptr corp = get_corpus();
+ if (s.priv_->matches_soname(corp->get_soname())
+ && s.priv_->matches_binary_name(corp->get_path()))
+ return true;
+ return false;
+ }
+
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its name.
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function name.
+ ///
+ /// @param fn_name the name of the function of interest. Note that
+ /// this name must be *non* qualified.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose name is @p fn_name.
+ bool
+ suppression_matches_function_name(const suppr::function_suppression& s,
+ const string& fn_name) const
+ {
+ if (!s.get_drops_artifact_from_ir()
+ || !suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_function_name(s, fn_name);
+ }
+
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its linkage
+ /// name (symbol name).
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function linkage name
+ ///
+ /// @param fn_linkage_name the linkage name of the function of interest.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose linkage name is @p fn_linkage_name.
+ bool
+ suppression_matches_function_sym_name(const suppr::function_suppression_sptr& s,
+ const string& fn_linkage_name) const
+ {
+ if (!s)
+ return false;
+ return suppression_matches_function_sym_name(*s, fn_linkage_name);
+ }
+
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its linkage
+ /// name (symbol name).
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function linkage name
+ ///
+ /// @param fn_linkage_name the linkage name of the function of interest.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose linkage name is @p fn_linkage_name.
+ bool
+ suppression_matches_function_sym_name(const suppr::function_suppression& s,
+ const string& fn_linkage_name) const
+ {
+ if (!s.get_drops_artifact_from_ir()
+ || !suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_function_sym_name(s, fn_linkage_name);
+ }
+
+ /// Test whether if a given variable suppression specification
+ /// matches a variable denoted by its name.
+ ///
+ /// @param s the variable suppression specification to consider.
+ ///
+ /// @param var_name the name of the variable to consider.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// variable whose name is @p var_name.
+ bool
+ suppression_matches_variable_name(const suppr::variable_suppression& s,
+ const string& var_name) const
+ {
+ if (!s.get_drops_artifact_from_ir()
+ || !suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_variable_name(s, var_name);
+ }
+
+ /// Test whether if a given variable suppression specification
+ /// matches a variable denoted by its linkage name.
+ ///
+ /// @param s the variable suppression specification to consider.
+ ///
+ /// @param var_linkage_name the linkage name of the variable to consider.
+ ///
+ /// @return true iff variable suppression specification @p s matches
+ /// the variable denoted by linkage name @p var_linkage_name.
+ bool
+ suppression_matches_variable_sym_name(const suppr::variable_suppression& s,
+ const string& var_linkage_name) const
+ {
+ if (!s.get_drops_artifact_from_ir()
+ || !suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_variable_sym_name(s, var_linkage_name);
+ }
+
+ /// Test if a given type suppression specification matches a type
+ /// designated by its name and location.
+ ///
+ /// @param s the suppression specification to consider.
+ ///
+ /// @param type_name the fully qualified type name to consider.
+ ///
+ /// @param type_location the type location to consider.
+ ///
+ /// @return true iff the type suppression specification matches a
+ /// type of a given name and location.
+ bool
+ suppression_matches_type_name_or_location(const suppr::type_suppression& s,
+ const string& type_name,
+ const location& type_location) const
+ {
+ if (!suppression_can_match(s))
+ return false;
+
+ return suppr::suppression_matches_type_name_or_location(s, type_name,
+ type_location);
+ }
};// end class read_context
static int advance_cursor(read_context&);
static bool read_symbol_db_from_input(read_context&,
string_elf_symbols_map_sptr&,
string_elf_symbols_map_sptr&);
-static bool read_location(read_context&, xmlNodePtr, location&);
+static bool read_location(const read_context&, xmlNodePtr, location&);
static bool read_visibility(xmlNodePtr, decl_base::visibility&);
static bool read_binding(xmlNodePtr, decl_base::binding&);
static bool read_access(xmlNodePtr, access_specifier&);
static string_elf_symbols_map_sptr
build_elf_symbol_db(read_context&, const xmlNodePtr, bool);
-static shared_ptr<function_decl::parameter>
+static function_decl::parameter_sptr
build_function_parameter (read_context&, const xmlNodePtr);
-static shared_ptr<function_decl>
+static function_decl_sptr
build_function_decl(read_context&, const xmlNodePtr,
shared_ptr<class_decl>, bool);
-static shared_ptr<var_decl>
+static function_decl_sptr
+build_function_decl_if_not_suppressed(read_context&, const xmlNodePtr,
+ class_decl_sptr, bool);
+
+static bool
+function_is_suppressed(const read_context& ctxt,
+ xmlNodePtr node);
+
+static var_decl_sptr
+build_var_decl_if_not_suppressed(read_context&, const xmlNodePtr, bool);
+
+static var_decl_sptr
build_var_decl(read_context&, const xmlNodePtr, bool);
+static bool
+variable_is_suppressed(const read_context& ctxt,
+ xmlNodePtr node);
+
static shared_ptr<type_decl>
build_type_decl(read_context&, const xmlNodePtr, bool);
{
if (n->type != XML_ELEMENT_NODE)
continue;
- assert(handle_element_node(ctxt, n,
- /*add_decl_to_scope=*/true));
+ handle_element_node(ctxt, n, /*add_decl_to_scope=*/true);
}
ctxt.pop_scope_or_abort(tu->get_global_scope());
return result;
}
+/// Add suppressions specifications to the set of suppressions to be
+/// used during the construction of the ABI internal representation
+/// (the ABI corpus) from ELF and DWARF.
+///
+/// During the construction of the ABI corpus, ABI artifacts that
+/// match the a given suppression specification are dropped on the
+/// floor; that is, they are discarded and won't be part of the final
+/// ABI corpus. This is a way to reduce the amount of data held by
+/// the final ABI corpus.
+///
+/// Note that the suppression specifications provided to this function
+/// are only considered during the construction of the ABI corpus.
+/// For instance, they are not taken into account during e.g
+/// comparisons of two ABI corpora that might happen later. If you
+/// want to apply suppression specificatins to the comparison (or
+/// reporting) of ABI corpora please refer to the documentation of the
+/// @ref diff_context type to learn how to set suppressions that are
+/// to be used in that context.
+///
+/// @param ctxt the context that is going to be used by functions that
+/// read types and declarations information to construct and ABI
+/// corpus.
+///
+/// @param supprs the suppression specifications to be applied during
+/// the construction of the ABI corpus.
+void
+add_read_context_suppressions(read_context& ctxt,
+ const suppr::suppressions_type& supprs)
+{
+ for (suppr::suppressions_type::const_iterator i = supprs.begin();
+ i != supprs.end();
+ ++i)
+ if ((*i)->get_drops_artifact_from_ir())
+ ctxt.get_suppressions().push_back(*i);
+}
+
/// Parse the input XML document containing an ABI corpus, represented
/// by an 'abi-corpus' element node, associated to the current
/// context.
/// @param ctxt the current input context.
///
/// @return the corpus resulting from the parsing
-static corpus_sptr
+corpus_sptr
read_corpus_from_input(read_context& ctxt)
{
corpus_sptr nil;
///
/// @return true upon sucessful parsing, false otherwise.
static bool
-read_location(read_context& ctxt,
- xmlNodePtr node,
- location& loc)
+read_location(const read_context& ctxt,
+ xmlNodePtr node,
+ location& loc)
{
string file_path;
size_t line = 0, column = 0;
if (xml_char_sptr c = xml::build_sptr(xmlGetProp(node, BAD_CAST("column"))))
column = atoi(CHAR_STR(c));
- loc =
- ctxt.get_translation_unit()->get_loc_mgr().create_new_location(file_path,
- line,
- column);
+ read_context& c = const_cast<read_context&>(ctxt);
+ loc = c.get_translation_unit()->get_loc_mgr().create_new_location(file_path,
+ line,
+ column);
return true;
}
{
if (n->type != XML_ELEMENT_NODE)
continue;
- assert(handle_element_node(ctxt, n, /*add_to_current_scope=*/true));
+ handle_element_node(ctxt, n, /*add_to_current_scope=*/true);
}
ctxt.pop_scope_or_abort(decl);
static function_decl_sptr
build_function_decl(read_context& ctxt,
const xmlNodePtr node,
- shared_ptr<class_decl> as_method_decl,
- bool add_to_current_scope)
+ class_decl_sptr as_method_decl,
+ bool add_to_current_scope)
{
shared_ptr<function_decl> nil;
return fn_decl;
}
+/// Build a function_decl from a 'function-decl' xml node if it's not
+/// been suppressed by a suppression specification that is in the
+/// context.
+///
+/// @param ctxt the context of the parsing.
+///
+/// @param node the xml node to build the function_decl from.
+///
+/// @param as_method_decl if this is set to a class_decl pointer, it
+/// means that the 'function-decl' xml node should be parsed as a
+/// method_decl. The class_decl pointer is the class decl to which
+/// the resulting method_decl is a member function of. The resulting
+/// shared_ptr<function_decl> that is returned is then really a
+/// shared_ptr<class_decl::method_decl>.
+///
+/// @param add_to_current_scope if set to yes, the resulting of
+/// this function is added to its current scope.
+///
+/// @return a pointer to a newly created function_decl upon successful
+/// completion. If the function was suppressed by a suppression
+/// specification then returns nil.
+static function_decl_sptr
+build_function_decl_if_not_suppressed(read_context& ctxt,
+ const xmlNodePtr node,
+ class_decl_sptr as_method_decl,
+ bool add_to_current_scope)
+{
+ function_decl_sptr fn;
+
+ if (function_is_suppressed(ctxt, node))
+ // The function was suppressed by at least one suppression
+ // specification associated to the current read context. So
+ // don't build any IR for it.
+ ;
+ else
+ fn = build_function_decl(ctxt, node, as_method_decl,
+ add_to_current_scope);
+ return fn;
+}
+
+/// Test if a given function denoted by its name and linkage name is
+/// suppressed by any of the suppression specifications associated to
+/// a given context of native xml reading.
+///
+/// @param ctxt the native xml reading context of interest.
+///
+/// @param note the XML node that represents the fucntion.
+/// match.
+///
+/// @return true iff at least one function specification matches the
+/// function denoted by the node @p node.
+static bool
+function_is_suppressed(const read_context& ctxt, xmlNodePtr node)
+{
+ string fname;
+ if (xml_char_sptr s = XML_NODE_GET_ATTRIBUTE(node, "name"))
+ fname = xml::unescape_xml_string(CHAR_STR(s));
+
+ string flinkage_name;
+ if (xml_char_sptr s = XML_NODE_GET_ATTRIBUTE(node, "mangled-name"))
+ flinkage_name = xml::unescape_xml_string(CHAR_STR(s));
+
+ scope_decl* scope = ctxt.get_cur_scope();
+
+ string qualified_name = build_qualified_name(scope, fname);
+
+ return suppr::function_is_suppressed(ctxt, qualified_name, flinkage_name);
+}
+
+/// Test if a type denoted by its name, context and location is
+/// suppressed by the suppression specifications that are associated
+/// to a given read context.
+///
+/// @param ctxt the read context to consider.
+///
+/// @param note the XML node that represents the type.
+///
+/// @return true iff the type designated by @p node is suppressed by
+/// at least of suppression specifications associated to the current
+/// read context.
+static bool
+type_is_suppressed(const read_context& ctxt, xmlNodePtr node)
+{
+ string type_name;
+ if (xml_char_sptr s = XML_NODE_GET_ATTRIBUTE(node, "name"))
+ type_name = xml::unescape_xml_string(CHAR_STR(s));
+
+ location type_location;
+ read_location(ctxt, node, type_location);
+
+ scope_decl* scope = ctxt.get_cur_scope();
+
+ string qualified_name = build_qualified_name(scope, type_name);
+
+ return suppr::type_is_suppressed(ctxt, qualified_name, type_location,
+ /*require_drop_property=*/true);
+}
+
+/// Build a @ref var_decl out of a an XML node that describes it iff
+/// the variable denoted by the XML node is not suppressed by a
+/// suppression specification associated to the current read context.
+///
+/// @param ctxt the read context to use.
+///
+/// @param node the XML node for the variable to consider.
+///
+/// @parm add_to_current_scope whether to add the built @ref var_decl
+/// to the current scope or not.
+///
+/// @return true iff the @ref var_decl was built.
+static var_decl_sptr
+build_var_decl_if_not_suppressed(read_context& ctxt,
+ const xmlNodePtr node,
+ bool add_to_current_scope)
+{
+ var_decl_sptr var;
+ if (!variable_is_suppressed(ctxt, node))
+ var = build_var_decl(ctxt, node, add_to_current_scope);
+ return var;
+}
+
+/// Test if a variable denoted by its XML node is suppressed by a
+/// suppression specification that is present in a given read context.
+///
+/// @param ctxt the read context to consider.
+///
+/// @param node the XML node of the variable to consider.
+///
+/// @return true iff the variable denoted by @p node is suppressed.
+static bool
+variable_is_suppressed(const read_context& ctxt, xmlNodePtr node)
+{
+ string name;
+ if (xml_char_sptr s = XML_NODE_GET_ATTRIBUTE(node, "name"))
+ name = xml::unescape_xml_string(CHAR_STR(s));
+
+ string linkage_name;
+ if (xml_char_sptr s = XML_NODE_GET_ATTRIBUTE(node, "mangled-name"))
+ linkage_name = xml::unescape_xml_string(CHAR_STR(s));
+
+ scope_decl* scope = ctxt.get_cur_scope();
+
+ string qualified_name = build_qualified_name(scope, name);
+
+ return suppr::variable_is_suppressed(ctxt, qualified_name, linkage_name);
+}
+
+/// Test if a variable in a particular scope is suppressed by a
+/// suppression specification that is present in a given read context.
+///
+/// @parm ctxt the read context to consider.
+///
+/// @param scope the scope of the variable to consider.
+///
+/// @param v the variable to consider.
+///
+/// @return true iff the variable @p v is suppressed.
+static bool
+variable_is_suppressed(const read_context& ctxt,
+ const scope_decl* scope,
+ const var_decl& v)
+{
+ string qualified_name = build_qualified_name(scope, v.get_name());
+ return suppr::variable_is_suppressed(ctxt, qualified_name,
+ v.get_linkage_name());
+}
+
/// Build pointer to var_decl from a 'var-decl' xml Node
///
/// @param ctxt the context of the parsing.
return nil;
}
+/// Build an @ref enum_type_decl from the XML node that represents it,
+/// if it was not suppressed by a supression specification present in
+/// the current read_context.
+///
+/// @param ctxt the read_context to take into account.
+///
+/// @param node the XML node representing the @ref enum_type_decl to
+/// build.
+///
+/// @param add_to_current_scope whether to add the built @ref
+/// enum_type_decl to the current scope.
+///
+/// @return the newly built @ref enum_type_decl iff it was effectively
+/// built.
+static enum_type_decl_sptr
+build_enum_type_decl_if_not_suppressed(read_context& ctxt,
+ const xmlNodePtr node,
+ bool add_to_current_scope)
+{
+ enum_type_decl_sptr enum_type;
+ if (!type_is_suppressed(ctxt, node))
+ enum_type = build_enum_type_decl(ctxt, node, add_to_current_scope);
+ return enum_type;
+}
+
/// Build an enum_type_decl from an 'enum-type-decl' xml node.
///
/// @param ctxt the context of the parsing.
const xmlNodePtr node,
bool add_to_current_scope)
{
- shared_ptr<enum_type_decl> nil;
+ enum_type_decl_sptr nil;
if (!xmlStrEqual(node->name, BAD_CAST("enum-decl")))
return nil;
return nil;
}
+/// Build a class from its XML node if it is not suppressed by a
+/// suppression specification that is present in the read context.
+///
+/// @param ctxt the read context to consider.
+///
+/// @param node the XML node to consider.
+///
+/// @param add_to_current_scope whether to add the built class to the
+/// current context or not.
+///
+/// @return true iff the class was built.
+static class_decl_sptr
+build_class_decl_if_not_suppressed(read_context& ctxt,
+ const xmlNodePtr node,
+ bool add_to_current_scope)
+{
+ class_decl_sptr class_type;
+ if (!type_is_suppressed(ctxt, node))
+ class_type = build_class_decl(ctxt, node, add_to_current_scope);
+ return class_type;
+}
+
/// Build a class_decl from a 'class-decl' xml node.
///
/// @param ctxt the context of the parsing.
const xmlNodePtr node,
bool add_to_current_scope)
{
- shared_ptr<class_decl> nil;
+ class_decl_sptr nil;
if (!xmlStrEqual(node->name, BAD_CAST("class-decl")))
return nil;
continue;
if (type_base_sptr t =
- build_type(ctxt, p, /*add_to_current_scope=*/false))
+ build_type(ctxt, p, /*add_to_current_scope=*/true))
{
- if (!get_type_declaration(t)->get_scope())
- {
- type_base_sptr m =
- decl->add_member_type(t, access);
- ctxt.maybe_canonicalize_type(m, !add_to_current_scope);
- xml_char_sptr i= XML_NODE_GET_ATTRIBUTE(p, "id");
- string id = CHAR_STR(i);
- assert(!id.empty());
- ctxt.key_type_decl(m, id);
- ctxt.map_xml_node_to_decl(p, get_type_declaration(m));
- }
+ decl_base_sptr td = get_type_declaration(t);
+ assert(td);
+ set_member_access_specifier(td, access);
+ ctxt.maybe_canonicalize_type(t, !add_to_current_scope);
+ xml_char_sptr i= XML_NODE_GET_ATTRIBUTE(p, "id");
+ string id = CHAR_STR(i);
+ assert(!id.empty());
+ ctxt.key_type_decl(t, id);
+ ctxt.map_xml_node_to_decl(p, td);
}
}
}
if (p->type != XML_ELEMENT_NODE)
continue;
- if (shared_ptr<var_decl> v =
- build_var_decl(ctxt, p, /*add_to_current_scope=*/false))
+ if (var_decl_sptr v =
+ build_var_decl(ctxt, p, /*add_to_cur_scope=*/false))
{
if (decl->find_data_member(v->get_name()))
{
assert(is_var_decl(d));
continue;
}
- decl->add_data_member(v, access,
- is_laid_out,
- is_static,
- offset_in_bits);
+ if (!is_static
+ || !variable_is_suppressed(ctxt, decl.get(), *v))
+ decl->add_data_member(v, access,
+ is_laid_out,
+ is_static,
+ offset_in_bits);
}
}
}
continue;
if (function_decl_sptr f =
- build_function_decl(ctxt, p, decl,
- /*add_to_current_scope=*/true))
+ build_function_decl_if_not_suppressed(ctxt, p, decl,
+ /*add_to_cur_sc=*/true))
{
- class_decl::method_decl_sptr m =
- dynamic_pointer_cast<class_decl::method_decl>(f);
+ class_decl::method_decl_sptr m = is_method_decl(f);
assert(m);
set_member_access_specifier(m, access);
set_member_is_static(m, is_static);
fn_tmpl_decl->add_template_parameter(parm);
++parm_index;
}
- else if (shared_ptr<function_decl> f =
- build_function_decl(ctxt, n, shared_ptr<class_decl>(),
- /*add_to_current_scope=*/true))
+ else if (function_decl_sptr f =
+ build_function_decl_if_not_suppressed(ctxt, n, class_decl_sptr(),
+ /*add_to_current_scope=*/true))
fn_tmpl_decl->set_pattern(f);
}
class_tmpl->add_template_parameter(parm);
++parm_index;
}
- else if (shared_ptr<class_decl> c =
- build_class_decl(ctxt, n, add_to_current_scope))
+ else if (class_decl_sptr c =
+ build_class_decl_if_not_suppressed(ctxt, n,
+ add_to_current_scope))
{
if (c->get_scope())
ctxt.maybe_canonicalize_type(c, /*force_delay=*/false);
///
/// @return a pointer to the newly built type_base upon successful
/// completion, a null pointer otherwise.
-static shared_ptr<type_base>
+static type_base_sptr
build_type(read_context& ctxt,
const xmlNodePtr node,
bool add_to_current_scope)
{
- shared_ptr<type_base> t;
+ type_base_sptr t;
((t = build_type_decl(ctxt, node, add_to_current_scope))
|| (t = build_qualified_type_decl(ctxt, node, add_to_current_scope))
|| (t = build_reference_type_def(ctxt, node , add_to_current_scope))
|| (t = build_function_type(ctxt, node, add_to_current_scope))
|| (t = build_array_type_def(ctxt, node, add_to_current_scope))
- || (t = build_enum_type_decl(ctxt, node, add_to_current_scope))
+ || (t = build_enum_type_decl_if_not_suppressed(ctxt, node,
+ add_to_current_scope))
|| (t = build_typedef_decl(ctxt, node, add_to_current_scope))
- || (t = build_class_decl(ctxt, node, add_to_current_scope)));
+ || (t = build_class_decl_if_not_suppressed(ctxt, node,
+ add_to_current_scope)));
return t;
}
xmlNodePtr node,
bool add_to_current_scope)
{
- enum_type_decl_sptr decl = build_enum_type_decl(ctxt, node,
- add_to_current_scope);
+ enum_type_decl_sptr decl =
+ build_enum_type_decl_if_not_suppressed(ctxt, node,
+ add_to_current_scope);
if (decl && decl->get_scope())
ctxt.maybe_canonicalize_type(decl, /*force_delay=*/false);
return decl;
xmlNodePtr node,
bool add_to_current_scope)
{
- decl_base_sptr decl = build_var_decl(ctxt, node,
- add_to_current_scope);
+ decl_base_sptr decl = build_var_decl_if_not_suppressed(ctxt, node,
+ add_to_current_scope);
return decl;
}
xmlNodePtr node,
bool add_to_current_scope)
{
- function_decl_sptr fn = build_function_decl(ctxt, node,
- class_decl_sptr(),
- add_to_current_scope);
- return fn;
+ return build_function_decl_if_not_suppressed(ctxt, node, class_decl_sptr(),
+ add_to_current_scope);
}
/// Parse a 'class-decl' xml element.
xmlNodePtr node,
bool add_to_current_scope)
{
- class_decl_sptr decl = build_class_decl(ctxt, node,
- add_to_current_scope);
+ class_decl_sptr decl =
+ build_class_decl_if_not_suppressed(ctxt, node, add_to_current_scope);
if (decl && decl->get_scope())
ctxt.maybe_canonicalize_type(decl, /*force_delay=*/false);
return decl;
#endif //WITH_ZIP_ARCHIVE
+/// Create an xml_reader::read_context to read a native XML ABI file.
+///
+/// @param path the path to the native XML file to read.
+///
+/// @param env the environment to use.
+///
+/// @return the created context.
+read_context_sptr
+create_native_xml_read_context(const string& path, environment *env)
+{
+ read_context_sptr result(new read_context(xml::new_reader_from_file(path),
+ env));
+ corpus_sptr corp(new corpus(env));
+ result->set_corpus(corp);
+ result->set_path(path);
+ return result;
+}
+
+/// Create an xml_reader::read_context to read a native XML ABI from
+/// an input stream..
+///
+/// @param in the input stream that contains the native XML file to read.
+///
+/// @param env the environment to use.
+///
+/// @return the created context.
+read_context_sptr
+create_native_xml_read_context(std::istream* in, environment* env)
+{
+ read_context_sptr result(new read_context(xml::new_reader_from_istream(in),
+ env));
+ corpus_sptr corp(new corpus(env, ""));
+ result->set_corpus(corp);
+ return result;
+}
+
+/// Read an ABI corpus from a given reading context.
+///
+/// @return the resulting ABI corpus.
+corpus_sptr
+read_corpus_from_native_xml(read_context& ctxt)
+{return read_corpus_from_input(ctxt);}
+
/// De-serialize an ABI corpus from an input XML document which root
/// node is 'abi-corpus'.
///
read_corpus_from_native_xml(std::istream* in,
environment* env)
{
- read_context read_ctxt(xml::new_reader_from_istream(in), env);
- corpus_sptr corp(new corpus(env, ""));
- read_ctxt.set_corpus(corp);
- return read_corpus_from_input(read_ctxt);
+ read_context_sptr read_ctxt = create_native_xml_read_context(in, env);
+ return read_corpus_from_input(*read_ctxt);
}
/// De-serialize an ABI corpus from an XML document file which root
read_corpus_from_native_xml_file(const string& path,
environment* env)
{
- read_context read_ctxt(xml::new_reader_from_file(path), env);
- corpus_sptr corp = read_corpus_from_input(read_ctxt);
- if (corp)
- {
- if (corp->get_path().empty())
- corp->set_path(path);
- }
+ read_context_sptr read_ctxt = create_native_xml_read_context(path, env);
+ corpus_sptr corp = read_corpus_from_input(*read_ctxt);
return corp;
}
--- /dev/null
+// -*- Mode: C++ -*-
+//
+// Copyright (C) 2016 Red Hat, Inc.
+//
+// This file is part of the GNU Application Binary Interface Generic
+// Analysis and Instrumentation Library (libabigail). This library is
+// free software; you can redistribute it and/or modify it under the
+// terms of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option) any
+// later version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Lesser Public License for more details.
+
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; see the file COPYING-LGPLV3. If
+// not, see <http://www.gnu.org/licenses/>.
+//
+// Author: Dodji Seketeli
+
+/// @file
+///
+/// This contains the private implementation of the suppression engine
+/// of libabigail.
+
+#ifndef __ABG_SUPPRESSION_PRIV_H__
+#define __ABG_SUPPRESSION_PRIV_H__
+
+#include "abg-fwd.h"
+#include "abg-suppression.h"
+#include "abg-sptr-utils.h"
+
+namespace abigail
+{
+
+namespace suppr
+{
+
+// <suppression_base stuff>
+
+/// The private data of @ref suppression_base.
+class suppression_base::priv
+{
+ bool is_artificial_;
+ bool drops_artifact_;
+ string label_;
+ string file_name_regex_str_;
+ mutable sptr_utils::regex_t_sptr file_name_regex_;
+ string file_name_not_regex_str_;
+ mutable sptr_utils::regex_t_sptr file_name_not_regex_;
+ string soname_regex_str_;
+ mutable sptr_utils::regex_t_sptr soname_regex_;
+ string soname_not_regex_str_;
+ mutable sptr_utils::regex_t_sptr soname_not_regex_;
+
+public:
+ priv()
+ : is_artificial_(),
+ drops_artifact_()
+ {}
+
+ priv(const string& label)
+ : is_artificial_(),
+ drops_artifact_(),
+ label_(label)
+ {}
+
+ priv(const string& label,
+ const string& file_name_regex_str,
+ const string& file_name_not_regex_str)
+ : is_artificial_(),
+ drops_artifact_(),
+ label_(label),
+ file_name_regex_str_(file_name_regex_str),
+ file_name_not_regex_str_(file_name_not_regex_str)
+ {}
+
+ friend class suppression_base;
+
+ /// Get the regular expression object associated to the 'file_name_regex'
+ /// property of @ref suppression_base.
+ ///
+ /// If the regular expression object is not created, this method
+ /// creates it and returns it.
+ ///
+ /// If the 'file_name_regex' property of @ref suppression_base is
+ /// empty then this method returns nil.
+ const sptr_utils::regex_t_sptr&
+ get_file_name_regex() const
+ {
+ if (!file_name_regex_)
+ {
+ if (!file_name_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ file_name_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ file_name_regex_ = r;
+ }
+ }
+ return file_name_regex_;
+ }
+
+ /// Get the regular expression object associated to the
+ /// 'file_name_not_regex' property of @ref suppression_base.
+ ///
+ /// If the regular expression object is not created, this method
+ /// creates it and returns it.
+ ///
+ /// If the 'file_name_not_regex' property of @ref suppression_base
+ /// is empty then this method returns nil.
+ const sptr_utils::regex_t_sptr&
+ get_file_name_not_regex() const
+ {
+ if (!file_name_not_regex_)
+ {
+ if (!file_name_not_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ file_name_not_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ file_name_not_regex_ = r;
+ }
+ }
+ return file_name_not_regex_;
+ }
+
+ /// Get the regular expression object associated to the
+ /// 'soname_regex' property of @ref suppression_base.
+ ///
+ /// If the regular expression object is not created, this method
+ /// creates it and returns it.
+ ///
+ /// If the 'soname_regex' property of @ref suppression_base is empty
+ /// then this method returns nil.
+ const sptr_utils::regex_t_sptr&
+ get_soname_regex() const
+ {
+ if (!soname_regex_)
+ {
+ if (!soname_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ soname_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ soname_regex_ = r;
+ }
+ }
+ return soname_regex_;
+ }
+
+ /// Get the regular expression object associated to the
+ /// 'soname_not_regex' property of @ref suppression_base.
+ ///
+ /// If the regular expression object is not created, this method
+ /// creates it and returns it.
+ ///
+ /// If the 'soname_not_regex' property of @ref suppression_base is
+ /// empty then this method returns nil.
+ const sptr_utils::regex_t_sptr&
+ get_soname_not_regex() const
+ {
+ if (!soname_not_regex_)
+ {
+ if (!soname_not_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ soname_not_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ soname_not_regex_ = r;
+ }
+ }
+ return soname_not_regex_;
+ }
+
+ bool
+ matches_soname(const string& soname) const
+ {
+ if (sptr_utils::regex_t_sptr regexp = get_soname_regex())
+ if (regexec(regexp.get(), soname.c_str(), 0, NULL, 0) != 0)
+ return false;
+
+ if (sptr_utils::regex_t_sptr regexp = get_soname_not_regex())
+ if (regexec(regexp.get(), soname.c_str(), 0, NULL, 0) == 0)
+ return false;
+
+ return true;
+ }
+
+ bool
+ matches_binary_name(const string& binary_name) const
+ {
+ if (sptr_utils::regex_t_sptr regexp = get_file_name_regex())
+ if (regexec(regexp.get(), binary_name.c_str(),
+ 0, NULL, 0) != 0)
+ return false;
+
+ if (sptr_utils::regex_t_sptr regexp = get_file_name_not_regex())
+ if (regexec(regexp.get(), binary_name.c_str(),
+ 0, NULL, 0) == 0)
+ return false;
+
+ return true;
+ }
+
+}; // end clas suppression_base::priv
+
+// </suppression_base stuff>
+
+// <function_suppression stuff>
+
+class function_suppression::parameter_spec::priv
+{
+ friend class function_suppression::parameter_spec;
+ friend class function_suppression;
+
+ size_t index_;
+ string type_name_;
+ string type_name_regex_str_;
+ mutable sptr_utils::regex_t_sptr type_name_regex_;
+
+ priv()
+ : index_()
+ {}
+
+ priv(size_t i, const string& tn)
+ : index_(i), type_name_(tn)
+ {}
+
+ priv(size_t i, const string& tn, const string& tn_regex)
+ : index_(i), type_name_(tn), type_name_regex_str_(tn_regex)
+ {}
+
+ const sptr_utils::regex_t_sptr
+ get_type_name_regex() const
+ {
+ if (!type_name_regex_ && !type_name_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ type_name_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ type_name_regex_ = r;
+ }
+ return type_name_regex_;
+ }
+}; // end class function_suppression::parameter_spec::priv
+
+
+/// The type of the private data of the @ref function_suppression
+/// type.
+struct function_suppression::priv
+{
+ friend class function_suppression;
+
+ change_kind change_kind_;
+ string name_;
+ string name_regex_str_;
+ mutable sptr_utils::regex_t_sptr name_regex_;
+ string name_not_regex_str_;
+ mutable sptr_utils::regex_t_sptr name_not_regex_;
+ string return_type_name_;
+ string return_type_regex_str_;
+ mutable sptr_utils::regex_t_sptr return_type_regex_;
+ parameter_specs_type parm_specs_;
+ string symbol_name_;
+ string symbol_name_regex_str_;
+ mutable sptr_utils::regex_t_sptr symbol_name_regex_;
+ string symbol_version_;
+ string symbol_version_regex_str_;
+ mutable sptr_utils::regex_t_sptr symbol_version_regex_;
+ bool allow_other_aliases_;
+
+ priv(const string& name,
+ const string& name_regex_str,
+ const string& return_type_name,
+ const string& return_type_regex_str,
+ const parameter_specs_type& parm_specs,
+ const string& symbol_name,
+ const string& symbol_name_regex_str,
+ const string& symbol_version,
+ const string& symbol_version_regex_str)
+ : change_kind_(ALL_CHANGE_KIND),
+ name_(name),
+ name_regex_str_(name_regex_str),
+ return_type_name_(return_type_name),
+ return_type_regex_str_(return_type_regex_str),
+ parm_specs_(parm_specs),
+ symbol_name_(symbol_name),
+ symbol_name_regex_str_(symbol_name_regex_str),
+ symbol_version_(symbol_version),
+ symbol_version_regex_str_(symbol_version_regex_str),
+ allow_other_aliases_(true)
+ {}
+
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// function_suppression::priv::name_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// function_suppression::priv::name_regex_str_..
+ const sptr_utils::regex_t_sptr
+ get_name_regex() const
+ {
+ if (!name_regex_ && !name_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ name_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ name_regex_ = r;
+ }
+ return name_regex_;
+ }
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// function_suppression::priv::name_not_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// function_suppression::priv::name_not_regex_str_..
+ const sptr_utils::regex_t_sptr
+ get_name_not_regex() const
+ {
+ if (!name_not_regex_ && !name_not_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ name_not_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ name_not_regex_ = r;
+ }
+ return name_not_regex_;
+ }
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// function_suppression::priv::return_type_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// function_suppression::priv::return_type_regex_str_.
+ const sptr_utils::regex_t_sptr
+ get_return_type_regex() const
+ {
+ if (!return_type_regex_ && !return_type_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ return_type_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ return_type_regex_ = r;
+ }
+ return return_type_regex_;
+ }
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// function_suppression::priv::symbol_name_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// function_suppression::priv::symbol_name_regex_str_.
+ const sptr_utils::regex_t_sptr
+ get_symbol_name_regex() const
+ {
+ if (!symbol_name_regex_ && !symbol_name_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ symbol_name_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ symbol_name_regex_ = r;
+ }
+ return symbol_name_regex_;
+ }
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// function_suppression::priv::symbol_version_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// function_suppression::priv::symbol_version_regex_str_.
+ const sptr_utils::regex_t_sptr
+ get_symbol_version_regex() const
+ {
+ if (!symbol_version_regex_ && ! symbol_version_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ symbol_version_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ symbol_version_regex_ = r;
+ }
+ return symbol_version_regex_;
+ }
+}; // end class function_suppression::priv
+
+bool
+suppression_matches_function_name(const suppr::function_suppression& s,
+ const string& fn_name);
+
+bool
+suppression_matches_function_sym_name(const suppr::function_suppression& s,
+ const string& fn_linkage_name);
+
+bool
+suppression_matches_variable_name(const suppr::variable_suppression& s,
+ const string& var_name);
+
+
+bool
+suppression_matches_variable_sym_name(const suppr::variable_suppression& s,
+ const string& var_linkage_name);
+
+/// Test if a given function denoted by its name and linkage name is
+/// suppressed by any of the suppression specifications associated to
+/// a given read context used to build the current internal
+/// representation of ABI corpus.
+///
+/// @param ctxt the reading context of interest.
+///
+/// @param fn_name the name of the function that a specification can
+/// match.
+///
+/// @param fn_linkage_name the linkage name of the function that a
+/// specification can match.
+///
+/// @param require_drop_property if set to "true", tests if the
+/// function is suppressed and if its representation is dropped from
+/// the ABI corpus being built. Otherwise, if set to "false", only
+/// test if the function is suppressed.
+///
+/// @return true iff at least one function specification matches a
+/// function with name @p fn_name or with linkage name @p
+/// fn_linkage_name.
+template <typename ReadContextType>
+bool
+function_is_suppressed(const ReadContextType& ctxt,
+ const string& fn_name,
+ const string& fn_linkage_name,
+ bool require_drop_property = false)
+{
+ for (suppr::suppressions_type::const_iterator i =
+ ctxt.get_suppressions().begin();
+ i != ctxt.get_suppressions().end();
+ ++i)
+ if (suppr::function_suppression_sptr suppr = is_function_suppression(*i))
+ {
+ if (require_drop_property && !(*i)->get_drops_artifact_from_ir())
+ continue;
+ if (ctxt.suppression_matches_function_name(*suppr, fn_name))
+ return true;
+ if (ctxt.suppression_matches_function_sym_name(*suppr,
+ fn_linkage_name))
+ return true;
+ }
+ return false;
+}
+// </function_suppression stuff>
+
+// <variable_suppression stuff>
+/// The type of the private data of the @ref variable_suppression
+/// type.
+struct variable_suppression::priv
+{
+ friend class variable_suppression;
+
+ change_kind change_kind_;
+ string name_;
+ string name_regex_str_;
+ mutable sptr_utils::regex_t_sptr name_regex_;
+ string name_not_regex_str_;
+ mutable sptr_utils::regex_t_sptr name_not_regex_;
+ string symbol_name_;
+ string symbol_name_regex_str_;
+ mutable sptr_utils::regex_t_sptr symbol_name_regex_;
+ string symbol_version_;
+ string symbol_version_regex_str_;
+ mutable sptr_utils::regex_t_sptr symbol_version_regex_;
+ string type_name_;
+ string type_name_regex_str_;
+ mutable sptr_utils::regex_t_sptr type_name_regex_;
+
+ priv(const string& name,
+ const string& name_regex_str,
+ const string& symbol_name,
+ const string& symbol_name_regex_str,
+ const string& symbol_version,
+ const string& symbol_version_regex_str,
+ const string& type_name,
+ const string& type_name_regex_str)
+ : change_kind_(ALL_CHANGE_KIND),
+ name_(name),
+ name_regex_str_(name_regex_str),
+ symbol_name_(symbol_name),
+ symbol_name_regex_str_(symbol_name_regex_str),
+ symbol_version_(symbol_version),
+ symbol_version_regex_str_(symbol_version_regex_str),
+ type_name_(type_name),
+ type_name_regex_str_(type_name_regex_str)
+ {}
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// variable_suppression::priv::name_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// variable_suppression::priv::name_regex_str_.
+ const sptr_utils::regex_t_sptr
+ get_name_regex() const
+ {
+ if (!name_regex_ && !name_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ name_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ name_regex_ = r;
+ }
+ return name_regex_;
+ }
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// variable_suppression::priv::name_not_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// variable_suppression::priv::name_not_regex_str_..
+ const sptr_utils::regex_t_sptr
+ get_name_not_regex() const
+ {
+ if (!name_not_regex_ && !name_not_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ name_not_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ name_not_regex_ = r;
+ }
+ return name_not_regex_;
+ }
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// variable_suppression::priv::symbol_name_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// variable_suppression::priv::symbol_name_regex_str_.
+ const sptr_utils::regex_t_sptr
+ get_symbol_name_regex() const
+ {
+ if (!symbol_name_regex_ && !symbol_name_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ symbol_name_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ symbol_name_regex_ = r;
+ }
+ return symbol_name_regex_;
+ }
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// variable_suppression::priv::symbol_version_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// variable_suppression::priv::symbol_version_regex_str_.
+ const sptr_utils::regex_t_sptr
+ get_symbol_version_regex() const
+ {
+ if (!symbol_version_regex_ && !symbol_version_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ symbol_version_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ symbol_version_regex_ = r;
+ }
+ return symbol_version_regex_;
+ }
+
+ /// Getter for a pointer to a regular expression object built from
+ /// the regular expression string
+ /// variable_suppression::priv::type_name_regex_str_.
+ ///
+ /// If that string is empty, then an empty regular expression object
+ /// pointer is returned.
+ ///
+ /// @return a pointer to the regular expression object of
+ /// variable_suppression::priv::type_name_regex_str_.
+ const sptr_utils::regex_t_sptr
+ get_type_name_regex() const
+ {
+ if (!type_name_regex_ && !type_name_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ type_name_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ type_name_regex_ = r;
+ }
+ return type_name_regex_;
+ }
+};// end class variable_supppression::priv
+
+template <typename ReadContextType>
+bool
+variable_is_suppressed(const ReadContextType& ctxt,
+ const string& var_name,
+ const string& var_linkage_name,
+ bool require_drop_property = false)
+{
+ for (suppr::suppressions_type::const_iterator i =
+ ctxt.get_suppressions().begin();
+ i != ctxt.get_suppressions().end();
+ ++i)
+ if (suppr::variable_suppression_sptr suppr = is_variable_suppression(*i))
+ {
+ if (require_drop_property && !(*i)->get_drops_artifact_from_ir())
+ continue;
+ if (ctxt.suppression_matches_variable_name(*suppr, var_name))
+ return true;
+ if (ctxt.suppression_matches_variable_sym_name(*suppr,
+ var_linkage_name))
+ return true;
+ }
+ return false;
+}
+
+// </variable_suppression stuff>
+
+// <type_suppression stuff>
+/// The private data for @ref type_suppression.
+class type_suppression::priv
+{
+ string type_name_regex_str_;
+ mutable sptr_utils::regex_t_sptr type_name_regex_;
+ string type_name_;
+ bool consider_type_kind_;
+ type_suppression::type_kind type_kind_;
+ bool consider_reach_kind_;
+ type_suppression::reach_kind reach_kind_;
+ type_suppression::insertion_ranges insertion_ranges_;
+ unordered_set<string> source_locations_to_keep_;
+ string source_location_to_keep_regex_str_;
+ mutable sptr_utils::regex_t_sptr source_location_to_keep_regex_;
+
+ priv();
+
+public:
+ priv(const string& type_name_regexp,
+ const string& type_name,
+ bool consider_type_kind,
+ type_suppression::type_kind type_kind,
+ bool consider_reach_kind,
+ type_suppression::reach_kind reach_kind)
+ : type_name_regex_str_(type_name_regexp),
+ type_name_(type_name),
+ consider_type_kind_(consider_type_kind),
+ type_kind_(type_kind),
+ consider_reach_kind_(consider_reach_kind),
+ reach_kind_(reach_kind)
+ {}
+
+ /// Get the regular expression object associated to the 'type_name_regex'
+ /// property of @ref type_suppression.
+ ///
+ /// If the regular expression object is not created, this method
+ /// creates it and returns it.
+ ///
+ /// If the 'type_name_regex' property of @ref type_suppression is
+ /// empty then this method returns nil.
+ const sptr_utils::regex_t_sptr
+ get_type_name_regex() const
+ {
+ if (!type_name_regex_)
+ {
+ if (!type_name_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ type_name_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ type_name_regex_ = r;
+ }
+ }
+ return type_name_regex_;
+ }
+
+ /// Setter for the type_name_regex object.
+ ///
+ /// @param r the new type_name_regex object.
+ void
+ set_type_name_regex(sptr_utils::regex_t_sptr r)
+ {type_name_regex_ = r;}
+
+ /// Getter for the source_location_to_keep_regex object.
+ ///
+ /// This function builds the regex if it's not yet built.
+ const sptr_utils::regex_t_sptr
+ get_source_location_to_keep_regex() const
+ {
+ if (!source_location_to_keep_regex_)
+ {
+ if (!source_location_to_keep_regex_str_.empty())
+ {
+ sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
+ if (regcomp(r.get(),
+ source_location_to_keep_regex_str_.c_str(),
+ REG_EXTENDED) == 0)
+ source_location_to_keep_regex_ = r;
+ }
+ }
+ return source_location_to_keep_regex_;
+ }
+
+ /// Setter for the source_location_to_keep_regex object.
+ ///
+ /// @param r the new regex object.
+ void
+ set_source_location_to_keep_regex(sptr_utils::regex_t_sptr r)
+ {source_location_to_keep_regex_ = r;}
+
+ friend class type_suppression;
+}; // class type_suppression::priv
+
+bool
+suppression_matches_type_name(const suppr::type_suppression& s,
+ const string& type_name);
+
+bool
+suppression_matches_type_name(const suppr::type_suppression& s,
+ const scope_decl* scope,
+ const type_base_sptr& type);
+
+bool
+suppression_matches_type_location(const type_suppression& s,
+ const location loc);
+
+bool
+suppression_matches_type_location(const type_suppression& s,
+ const type_base_sptr& type);
+
+bool
+suppression_matches_type_name_or_location(const type_suppression& s,
+ const string& type_name,
+ const location& type_location);
+
+/// Test if a type (designated by its name and location) is suppressed
+/// by at least one suppression specification associated with a given
+/// read context.
+///
+/// @param ctxt the read context to consider.
+///
+/// @param type_name the name of the type to consider.
+///
+/// @param type_location the location of the type to consider.
+///
+/// @param require_drop_property if set to "true", tests if the type
+/// is suppressed and if its representation is dropped from the ABI
+/// corpus being built. Otherwise, if set to "false", only test if
+/// the type is suppressed.
+///
+/// @return true iff at least one type specification matches a type
+/// with name @p type_name and with location @p type_location.
+template <typename ReadContextType>
+bool
+type_is_suppressed(const ReadContextType& ctxt,
+ const string& type_name,
+ const location& type_location,
+ bool require_drop_property = false)
+{
+ for (suppr::suppressions_type::const_iterator i =
+ ctxt.get_suppressions().begin();
+ i != ctxt.get_suppressions().end();
+ ++i)
+ if (suppr::type_suppression_sptr suppr = is_type_suppression(*i))
+ {
+ if (require_drop_property && !(*i)->get_drops_artifact_from_ir())
+ continue;
+ if (ctxt.suppression_matches_type_name_or_location(*suppr, type_name,
+ type_location))
+ return true;
+ }
+
+ return false;
+}
+// </type_suppression stuff>
+
+}// end namespace suppr
+} // end namespace abigail
+
+#endif // __ABG_SUPPRESSION_PRIV_H__
/// This contains the implementation of the suppression engine of
/// libabigail.
+#include "abg-suppression-priv.h"
+
#include "abg-internal.h"
// <headers defining libabigail's API go under here>
ABG_BEGIN_EXPORT_DECLARATIONS
-#include "abg-suppression.h"
#include "abg-ini.h"
-#include "abg-sptr-utils.h"
#include "abg-comp-filter.h"
#include "abg-tools-utils.h"
// <suppression_base stuff>
-/// The private data of @ref suppression_base.
-class suppression_base::priv
-{
- bool is_artificial_;
- string label_;
- string file_name_regex_str_;
- mutable sptr_utils::regex_t_sptr file_name_regex_;
- string file_name_not_regex_str_;
- mutable sptr_utils::regex_t_sptr file_name_not_regex_;
- string soname_regex_str_;
- mutable sptr_utils::regex_t_sptr soname_regex_;
- string soname_not_regex_str_;
- mutable sptr_utils::regex_t_sptr soname_not_regex_;
-
-public:
- priv()
- : is_artificial_()
- {}
-
- priv(const string& label)
- : is_artificial_(),
- label_(label)
- {}
-
- priv(const string& label,
- const string& file_name_regex_str,
- const string& file_name_not_regex_str)
- : is_artificial_(),
- label_(label),
- file_name_regex_str_(file_name_regex_str),
- file_name_not_regex_str_(file_name_not_regex_str)
- {}
-
- friend class suppression_base;
-
- /// Get the regular expression object associated to the 'file_name_regex'
- /// property of @ref suppression_base.
- ///
- /// If the regular expression object is not created, this method
- /// creates it and returns it.
- ///
- /// If the 'file_name_regex' property of @ref suppression_base is
- /// empty then this method returns nil.
- const sptr_utils::regex_t_sptr&
- get_file_name_regex() const
- {
- if (!file_name_regex_)
- {
- if (!file_name_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- file_name_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- file_name_regex_ = r;
- }
- }
- return file_name_regex_;
- }
-
- /// Get the regular expression object associated to the
- /// 'file_name_not_regex' property of @ref suppression_base.
- ///
- /// If the regular expression object is not created, this method
- /// creates it and returns it.
- ///
- /// If the 'file_name_not_regex' property of @ref suppression_base
- /// is empty then this method returns nil.
- const sptr_utils::regex_t_sptr&
- get_file_name_not_regex() const
- {
- if (!file_name_not_regex_)
- {
- if (!file_name_not_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- file_name_not_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- file_name_not_regex_ = r;
- }
- }
- return file_name_not_regex_;
- }
-
- /// Get the regular expression object associated to the
- /// 'soname_regex' property of @ref suppression_base.
- ///
- /// If the regular expression object is not created, this method
- /// creates it and returns it.
- ///
- /// If the 'soname_regex' property of @ref suppression_base is empty
- /// then this method returns nil.
- const sptr_utils::regex_t_sptr&
- get_soname_regex() const
- {
- if (!soname_regex_)
- {
- if (!soname_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- soname_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- soname_regex_ = r;
- }
- }
- return soname_regex_;
- }
-
- /// Get the regular expression object associated to the
- /// 'soname_not_regex' property of @ref suppression_base.
- ///
- /// If the regular expression object is not created, this method
- /// creates it and returns it.
- ///
- /// If the 'soname_not_regex' property of @ref suppression_base is
- /// empty then this method returns nil.
- const sptr_utils::regex_t_sptr&
- get_soname_not_regex() const
- {
- if (!soname_not_regex_)
- {
- if (!soname_not_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- soname_not_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- soname_not_regex_ = r;
- }
- }
- return soname_not_regex_;
- }
-
-}; // end clas suppression_base::priv
-
/// Constructor for @ref suppression_base
///
/// @param a label for the suppression. This represents just a
: priv_(new priv(label))
{}
+/// Constructor for @ref suppression_base
+///
+/// @param a label for the suppression. This represents just a
+/// comment.
+///
+/// @param file_name_regex_str the regular expression that denotes the
+/// file name to match.
+///
+/// @param file_name_not_regex_str the regular expression that denotes
+/// the file name to *NOT* match.
suppression_base::suppression_base(const string& label,
const string& file_name_regex_str,
const string& file_name_not_regex_str)
{
}
+/// Tests if the current suppression specification is to avoid adding
+/// the matched ABI artifact to the internal representation or not.
+///
+/// @return true iff the current suppression specification is to avoid
+/// adding the matched ABI artifact to the internal representation.
+bool
+suppression_base::get_drops_artifact_from_ir() const
+{return priv_->drops_artifact_;}
+
+/// Set the flag that says whether the current suppression
+/// specification is to avoid adding the matched ABI artifact to the
+/// internal representation or not.
+///
+/// @param f the flag to set to true iff the current suppression
+/// specification is to avoid adding the matched ABI artifact to the
+/// internal representation.
+void
+suppression_base::set_drops_artifact_from_ir(bool f) const
+{priv_->drops_artifact_ = f;}
+
/// Test is the suppression specification is artificial.
///
/// Artificial means that the suppression was automatically generated
suppression_base::get_soname_not_regex_str() const
{return priv_->soname_not_regex_str_;}
-/// Check if the names of the two binaries being compared match the
-/// content of the properties "file_name_regexp" and
-/// "file_name_not_regexp".
+/// Check if the SONAMEs of the two binaries being compared match the
+/// content of the properties "soname_regexp" and "soname_not_regexp"
+/// of the current suppression specification.
+///
+/// @param suppr the suppression specification
///
/// @param ctxt the context of the comparison.
///
/// @return false if the regular expression contained in the property
-/// file_name_regexp or in the property "file_name_not_regexp" does
-/// *NOT* match at least one of the names of the two binaries being
+/// soname_regexp or in the property "soname_not_regexp" does *NOT*
+/// match at least one of the SONAMEs of the two binaries being
/// compared. Return true otherwise.
-bool
-suppression_base::names_of_binaries_match(const diff_context& ctxt) const
+static bool
+sonames_of_binaries_match(const suppression_base& suppr,
+ const diff_context& ctxt)
{
- // Check if the names of the binaries match
- if (sptr_utils::regex_t_sptr regexp =
- suppression_base::priv_->get_file_name_regex())
- {
- string first_binary_path = ctxt.get_first_corpus()->get_path(),
- second_binary_path = ctxt.get_second_corpus()->get_path();
-
- string first_binary_name, second_binary_name;
-
- tools_utils::base_name(first_binary_path, first_binary_name);
- tools_utils::base_name(second_binary_path, second_binary_name);
-
- if ((regexec(regexp.get(), first_binary_name.c_str(),
- 0, NULL, 0) != 0)
- && (regexec(regexp.get(), second_binary_name.c_str(),
- 0, NULL, 0) != 0))
- return false;
- }
-
- if (sptr_utils::regex_t_sptr regexp =
- suppression_base::priv_->get_file_name_not_regex())
- {
- string first_binary_path = ctxt.get_first_corpus()->get_path(),
- second_binary_path = ctxt.get_second_corpus()->get_path();
-
- string first_binary_name, second_binary_name;
-
- tools_utils::base_name(first_binary_path, first_binary_name);
- tools_utils::base_name(second_binary_path, second_binary_name);
+ // Check if the sonames of the binaries match
+ string first_soname = ctxt.get_first_corpus()->get_soname(),
+ second_soname = ctxt.get_second_corpus()->get_soname();
- if ((regexec(regexp.get(), first_binary_name.c_str(),
- 0, NULL, 0) == 0)
- || (regexec(regexp.get(), second_binary_name.c_str(),
- 0, NULL, 0) == 0))
- return false;
- }
+ if (!suppr.priv_->matches_soname(first_soname)
+ && !suppr.priv_->matches_soname(second_soname))
+ return false;
return true;
}
-/// Check if the SONAMEs of the two binaries being compared match the
-/// content of the properties "soname_regexp" and "soname_not_regexp".
+/// Check if the names of the two binaries being compared match the
+/// content of the properties "file_name_regexp" and
+/// "file_name_not_regexp".
+///
+/// @param suppr the current suppression specification.
///
/// @param ctxt the context of the comparison.
///
/// @return false if the regular expression contained in the property
-/// soname_regexp or in the property "soname_not_regexp" does *NOT*
-/// match at least one of the SONAMEs of the two binaries being
+/// file_name_regexp or in the property "file_name_not_regexp" does
+/// *NOT* match at least one of the names of the two binaries being
/// compared. Return true otherwise.
-bool
-suppression_base::sonames_of_binaries_match(const diff_context& ctxt) const
+static bool
+names_of_binaries_match(const suppression_base& suppr,
+ const diff_context &ctxt)
{
- // Check if the sonames of the binaries match
- if (sptr_utils::regex_t_sptr regexp =
- suppression_base::priv_->get_soname_regex())
- {
- string first_soname = ctxt.get_first_corpus()->get_soname(),
- second_soname = ctxt.get_second_corpus()->get_soname();
-
- if ((regexec(regexp.get(), first_soname.c_str(),
- 0, NULL, 0) != 0)
- && (regexec(regexp.get(), second_soname.c_str(),
- 0, NULL, 0) != 0))
- return false;
- }
+ // Check if the file names of the binaries match
+ string first_binary_path = ctxt.get_first_corpus()->get_path(),
+ second_binary_path = ctxt.get_second_corpus()->get_path();
- if (sptr_utils::regex_t_sptr regexp =
- suppression_base::priv_->get_soname_not_regex())
- {
- string first_soname = ctxt.get_first_corpus()->get_soname(),
- second_soname = ctxt.get_second_corpus()->get_soname();
-
- if ((regexec(regexp.get(), first_soname.c_str(),
- 0, NULL, 0) == 0)
- || (regexec(regexp.get(), second_soname.c_str(),
- 0, NULL, 0) == 0))
- return false;
- }
+ if (!suppr.priv_->matches_binary_name(first_binary_path)
+ && !suppr.priv_->matches_binary_name(second_binary_path))
+ return false;
return true;
}
// <type_suppression stuff>
-/// The private data for @ref type_suppression.
-class type_suppression::priv
-{
- string type_name_regex_str_;
- mutable sptr_utils::regex_t_sptr type_name_regex_;
- string type_name_;
- bool consider_type_kind_;
- type_suppression::type_kind type_kind_;
- bool consider_reach_kind_;
- type_suppression::reach_kind reach_kind_;
- type_suppression::insertion_ranges insertion_ranges_;
- unordered_set<string> source_locations_to_keep_;
- string source_location_to_keep_regex_str_;
- mutable sptr_utils::regex_t_sptr source_location_to_keep_regex_;
-
- priv();
-
-public:
- priv(const string& type_name_regexp,
- const string& type_name,
- bool consider_type_kind,
- type_suppression::type_kind type_kind,
- bool consider_reach_kind,
- type_suppression::reach_kind reach_kind)
- : type_name_regex_str_(type_name_regexp),
- type_name_(type_name),
- consider_type_kind_(consider_type_kind),
- type_kind_(type_kind),
- consider_reach_kind_(consider_reach_kind),
- reach_kind_(reach_kind)
- {}
-
- /// Get the regular expression object associated to the 'type_name_regex'
- /// property of @ref type_suppression.
- ///
- /// If the regular expression object is not created, this method
- /// creates it and returns it.
- ///
- /// If the 'type_name_regex' property of @ref type_suppression is
- /// empty then this method returns nil.
- const sptr_utils::regex_t_sptr
- get_type_name_regex() const
- {
- if (!type_name_regex_)
- {
- if (!type_name_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- type_name_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- type_name_regex_ = r;
- }
- }
- return type_name_regex_;
- }
-
- /// Setter for the type_name_regex object.
- ///
- /// @param r the new type_name_regex object.
- void
- set_type_name_regex(sptr_utils::regex_t_sptr r)
- {type_name_regex_ = r;}
-
- /// Getter for the source_location_to_keep_regex object.
- ///
- /// This function builds the regex if it's not yet built.
- const sptr_utils::regex_t_sptr
- get_source_location_to_keep_regex() const
- {
- if (!source_location_to_keep_regex_)
- {
- if (!source_location_to_keep_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- source_location_to_keep_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- source_location_to_keep_regex_ = r;
- }
- }
- return source_location_to_keep_regex_;
- }
-
- /// Setter for the source_location_to_keep_regex object.
- ///
- /// @param r the new regex object.
- void
- set_source_location_to_keep_regex(sptr_utils::regex_t_sptr r)
- {source_location_to_keep_regex_ = r;}
-
- friend class type_suppression;
-}; // class type_suppression::priv
-
/// Constructor for @ref type_suppression.
///
/// @param label the label of the suppression. This is just a free
if (ctxt)
{
// Check if the names of the binaries match
- if (!names_of_binaries_match(*ctxt))
+ if (!names_of_binaries_match(*this, *ctxt))
return false;
// Check if the sonames of the binaries match
- if (!sonames_of_binaries_match(*ctxt))
+ if (!sonames_of_binaries_match(*this, *ctxt))
return false;
}
+ return suppresses_type(type);
+
+}
+
+/// Test if an instance of @ref type_suppression matches a given type.
+///
+/// This function does not take the name of the type into account
+/// while testing if the type matches the type_suppression.
+///
+/// @param s the suppression to evaluate.
+///
+/// @param type the type to consider.
+///
+/// @return true iff the suppression specification matches type @p
+/// type without taking its name into account.
+static bool
+suppression_matches_type_no_name(const type_suppression& s,
+ const type_base_sptr &type)
+{
// If the suppression should consider type kind then, well, check
// for that.
- if (get_consider_type_kind())
+ if (s.get_consider_type_kind())
{
- type_kind tk = get_type_kind();
+ type_suppression::type_kind tk = s.get_type_kind();
bool matches = true;
switch (tk)
{
}
// Check if there is a source location related match.
- if (decl_base_sptr d = get_type_declaration(type))
- {
- location loc = d->get_location();
- if (!loc)
- {
- if (class_decl_sptr c = is_class_type(d))
- if (c->get_is_declaration_only()
- && c->get_definition_of_declaration())
- {
- c = c->get_definition_of_declaration();
- loc = c->get_location();
- }
- }
+ if (!suppression_matches_type_location(s, type))
+ return false;
- if (loc)
- {
- translation_unit* tu = get_translation_unit(d);
- if (tu)
- {
- string loc_path, loc_path_base;
- unsigned loc_line = 0, loc_column = 0;
- tu->get_loc_mgr().expand_location(loc, loc_path,
- loc_line, loc_column);
-
- if (sptr_utils::regex_t_sptr regexp =
- priv_->get_source_location_to_keep_regex())
- if (regexec(regexp.get(), loc_path.c_str(), 0, NULL, 0) == 0)
- return false;
+ return true;
+}
- tools_utils::base_name(loc_path, loc_path_base);
- if (get_source_locations_to_keep().find(loc_path_base)
- != get_source_locations_to_keep().end())
- return false;
- if (get_source_locations_to_keep().find(loc_path)
- != get_source_locations_to_keep().end())
- return false;
- }
- else
- {
- if (!get_source_locations_to_keep().empty()
- || priv_->get_source_location_to_keep_regex())
- // The user provided a "source_location_not_regexp" or
- // a "source_location_not_in" property that was not
- // triggered. This means the current type suppression
- // doesn't suppress the type given.
- return false;
- }
+/// Test if a type suppression specification matches a type name.
+///
+/// @param s the type suppression to consider.
+///
+/// @param type_name the type name to consider.
+///
+/// @return true iff the type designated by its name @p type_name is
+/// matched by the type suppression specification @p s.
+bool
+suppression_matches_type_name(const type_suppression& s,
+ const string& type_name)
+{
+ if (!s.get_type_name().empty() || s.priv_->get_type_name_regex())
+ {
+ // Check if there is an exact type name match.
+ if (!s.get_type_name().empty())
+ {
+ if (s.get_type_name() != type_name)
+ return false;
}
else
{
- // So the type had no source location.
+ // Now check if there is a regular expression match.
//
- // In the case where this type suppression was automatically
- // generated to suppress types not defined in public
- // headers, then this might mean that the type is not
- // defined in the public headers. Otherwise, why does it
- // not have a source location?
- if (get_is_artificial())
- {
- if (class_decl_sptr cl = is_class_type(d))
- {
- if (cl->get_is_declaration_only())
- // We tried hard above to get the definition of
- // the declaration. If we reach this place, it
- // means the class has no definition at this point.
- assert(!cl->get_definition_of_declaration());
- if (get_label() == tools_utils::PRIVATE_TYPES_SUPPR_SPEC_NAME)
- // So this looks like what really amounts to an
- // opaque type. So it's not defined in the public
- // headers. So we want to filter it out.
- return true;
- }
- }
- if (!get_source_locations_to_keep().empty()
- || priv_->get_source_location_to_keep_regex())
- // The user provided a "source_location_not_regexp" or
- // a "source_location_not_in" property that was not
- // triggered. This means the current type suppression
- // doesn't suppress the type given.
+ // If the qualified name of the considered type doesn't match
+ // the regular expression of the type name, then this
+ // suppression doesn't apply.
+ const sptr_utils::regex_t_sptr& type_name_regex =
+ s.priv_->get_type_name_regex();
+ if (type_name_regex && (regexec(type_name_regex.get(),
+ type_name.c_str(),
+ 0, NULL, 0) != 0))
return false;
}
}
+
+ return true;
+}
+
+/// Test if a type suppression matches a type in a particular scope.
+///
+/// @param s the type suppression to consider.
+///
+/// @param type_scope the scope of the type to consider.
+///
+/// @param type the type to consider.
+///
+/// @return true iff the supression @p s matches type @p type in scope
+/// @p type_scope.
+bool
+suppression_matches_type_name(const suppr::type_suppression& s,
+ const scope_decl* type_scope,
+ const type_base_sptr& type)
+{
+ string type_name = build_qualified_name(type_scope, type);
+ return suppression_matches_type_name(s, type_name);
+}
+
+/// Test if a type suppression matches a source location.
+///
+/// @param s the type suppression to consider.
+///
+/// @param loc the location to consider.
+///
+/// @return true iff the suppression @p s matches location @p loc.
+bool
+suppression_matches_type_location(const type_suppression& s,
+ const location loc)
+{
+ if (loc)
+ {
+ // Check if there is a source location related match.
+ string loc_path, loc_path_base;
+ unsigned loc_line = 0, loc_column = 0;
+ loc.expand(loc_path, loc_line, loc_column);
+
+ if (sptr_utils::regex_t_sptr regexp =
+ s.priv_->get_source_location_to_keep_regex())
+ if (regexec(regexp.get(), loc_path.c_str(), 0, NULL, 0) == 0)
+ return false;
+
+ tools_utils::base_name(loc_path, loc_path_base);
+ if (s.get_source_locations_to_keep().find(loc_path_base)
+ != s.get_source_locations_to_keep().end())
+ return false;
+ if (s.get_source_locations_to_keep().find(loc_path)
+ != s.get_source_locations_to_keep().end())
+ return false;
+ }
else
{
- if (!get_source_locations_to_keep().empty()
- || priv_->get_source_location_to_keep_regex())
+ if (!s.get_source_locations_to_keep().empty()
+ || s.priv_->get_source_location_to_keep_regex())
// The user provided a "source_location_not_regexp" or
// a "source_location_not_in" property that was not
// triggered. This means the current type suppression
return false;
}
- if (!get_type_name().empty() || priv_->get_type_name_regex())
- {
- string name = get_name(type);
+ return true;
+}
+
+/// Test if a type suppression matches a type.
+///
+/// @param s the type suppression to consider.
+///
+/// @param type the type to consider.
+///
+/// @return true iff the suppression @p s matches type @p type.
+bool
+suppression_matches_type_location(const type_suppression& s,
+ const type_base_sptr& type)
+{
+ location loc = get_location(type);
+ if (loc)
+ return suppression_matches_type_location(s, loc);
+ else
+ {
+ // The type had no source location.
+ //
+ // In the case where this type suppression was automatically
+ // generated to suppress types not defined in public
+ // headers, then this might mean that the type is not
+ // defined in the public headers. Otherwise, why does it
+ // not have a source location?
+ if (s.get_is_artificial())
+ {
+ if (class_decl_sptr cl = is_class_type(type))
+ {
+ if (cl->get_is_declaration_only())
+ // We tried hard above to get the definition of
+ // the declaration. If we reach this place, it
+ // means the class has no definition at this point.
+ assert(!cl->get_definition_of_declaration());
+ if (s.get_label() == tools_utils::PRIVATE_TYPES_SUPPR_SPEC_NAME)
+ // So this looks like what really amounts to an
+ // opaque type. So it's not defined in the public
+ // headers. So we want to filter it out.
+ return true;
+ }
+ }
+ if (!s.get_source_locations_to_keep().empty()
+ || s.priv_->get_source_location_to_keep_regex())
+ // The user provided a "source_location_not_regexp" or
+ // a "source_location_not_in" property that was not
+ // triggered. This means the current type suppression
+ // doesn't suppress the type given.
+ return false;
+ }
+
+ return true;
+}
+
+/// Test if a type suppression matches a type name and location.
+///
+/// @param s the type suppression to consider.
+///
+/// @param type_name the name of the type to consider.
+///
+/// @param type_location the location of the type to consider.
+///
+/// @return true iff suppression @p s matches a type named @p
+/// type_name with a location @p type_location.
+bool
+suppression_matches_type_name_or_location(const type_suppression& s,
+ const string& type_name,
+ const location& type_location)
+{
+ if (!suppression_matches_type_name(s, type_name))
+ return false;
+ if (!suppression_matches_type_location(s, type_location))
+ return false;
+ return true;
+}
+
+/// Test if the current instance of @ref type_suppression matches a
+/// given type.
+///
+/// @param type the type to consider.
+///
+/// @return true iff the suppression specification suppresses type @p
+/// type.
+bool
+type_suppression::suppresses_type(const type_base_sptr& type) const
+{
+ if (!suppression_matches_type_no_name(*this, type))
+ return false;;
+
+ if (!suppression_matches_type_name(*this, get_name(type)))
+ return false;;
+
+ return true;
+}
+
+/// Test if the current instance of @ref type_suppression matches a
+/// given type in a given scope.
+///
+/// @param type the type to consider.
+///
+/// @param type_scope the scope of type @p type.
+///
+/// @return true iff the suppression specification suppresses type @p
+/// type from scope @p type_scope.
+bool
+type_suppression::suppresses_type(const type_base_sptr& type,
+ const scope_decl* type_scope) const
+{
+ if (!suppression_matches_type_no_name(*this, type))
+ return false;
+
+ if (!suppression_matches_type_name(*this, type_scope, type))
+ return false;
- // Check if there is an exact type name match.
- if (!get_type_name().empty())
- {
- if (get_type_name() != name)
- return false;
- }
- else
- {
- // So now check if there is a regular expression match.
- //
- // If the qualified name of the considered type doesn't match
- // the regular expression of the type name, then this
- // suppression doesn't apply.
- const sptr_utils::regex_t_sptr& type_name_regex =
- priv_->get_type_name_regex();
- if (type_name_regex && (regexec(type_name_regex.get(),
- name.c_str(),
- 0, NULL, 0) != 0))
- return false;
- }
- }
return true;
}
if (section.get_name() != "suppress_type")
return nil;
+ ini::simple_property_sptr drop_artifact =
+ is_simple_property(section.find_property("drop_artifact"));
+ if (!drop_artifact)
+ drop_artifact = is_simple_property(section.find_property("drop"));
+
+ string drop_artifact_str = drop_artifact
+ ? drop_artifact->get_value()->as_string()
+ : "";
+
ini::simple_property_sptr label =
is_simple_property(section.find_property("label"));
string label_str = label ? label->get_value()->as_string() : "";
if (!srcloc_not_regexp_str.empty())
suppr->set_source_location_to_keep_regex_str(srcloc_not_regexp_str);
+ if ((drop_artifact_str == "yes" || drop_artifact_str == "true")
+ && ((!name_regex_str.empty()
+ || !name_str.empty()
+ || !srcloc_not_regexp_str.empty()
+ || !srcloc_not_in.empty())))
+ suppr->set_drops_artifact_from_ir(true);
+
return suppr;
}
// <function_suppression stuff>
-class function_suppression::parameter_spec::priv
-{
- friend class function_suppression::parameter_spec;
- friend class function_suppression;
-
- size_t index_;
- string type_name_;
- string type_name_regex_str_;
- mutable sptr_utils::regex_t_sptr type_name_regex_;
-
- priv()
- : index_()
- {}
-
- priv(size_t i, const string& tn)
- : index_(i), type_name_(tn)
- {}
-
- priv(size_t i, const string& tn, const string& tn_regex)
- : index_(i), type_name_(tn), type_name_regex_str_(tn_regex)
- {}
-
- const sptr_utils::regex_t_sptr
- get_type_name_regex() const
- {
- if (!type_name_regex_ && !type_name_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- type_name_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- type_name_regex_ = r;
- }
- return type_name_regex_;
- }
-}; // end class function_suppression::parameter_spec::priv
/// Constructor for the @ref the function_suppression::parameter_spec
/// type.
(const string& type_name_regex_str)
{priv_->type_name_regex_str_ = type_name_regex_str;}
-/// The type of the private data of the @ref function_suppression
-/// type.
-class function_suppression::priv
-{
- friend class function_suppression;
-
- change_kind change_kind_;
- string name_;
- string name_regex_str_;
- mutable sptr_utils::regex_t_sptr name_regex_;
- string return_type_name_;
- string return_type_regex_str_;
- mutable sptr_utils::regex_t_sptr return_type_regex_;
- parameter_specs_type parm_specs_;
- string symbol_name_;
- string symbol_name_regex_str_;
- mutable sptr_utils::regex_t_sptr symbol_name_regex_;
- string symbol_version_;
- string symbol_version_regex_str_;
- mutable sptr_utils::regex_t_sptr symbol_version_regex_;
- bool allow_other_aliases_;
-
- priv(const string& name,
- const string& name_regex_str,
- const string& return_type_name,
- const string& return_type_regex_str,
- const parameter_specs_type& parm_specs,
- const string& symbol_name,
- const string& symbol_name_regex_str,
- const string& symbol_version,
- const string& symbol_version_regex_str)
- : change_kind_(ALL_CHANGE_KIND),
- name_(name),
- name_regex_str_(name_regex_str),
- return_type_name_(return_type_name),
- return_type_regex_str_(return_type_regex_str),
- parm_specs_(parm_specs),
- symbol_name_(symbol_name),
- symbol_name_regex_str_(symbol_name_regex_str),
- symbol_version_(symbol_version),
- symbol_version_regex_str_(symbol_version_regex_str),
- allow_other_aliases_(true)
- {}
-
-
- /// Getter for a pointer to a regular expression object built from
- /// the regular expression string
- /// function_suppression::priv::name_regex_str_.
- ///
- /// If that string is empty, then an empty regular expression object
- /// pointer is returned.
- ///
- /// @return a pointer to the regular expression object of
- /// function_suppression::priv::name_regex_str_..
- const sptr_utils::regex_t_sptr
- get_name_regex() const
- {
- if (!name_regex_ && !name_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- name_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- name_regex_ = r;
- }
- return name_regex_;
- }
-
- /// Getter for a pointer to a regular expression object built from
- /// the regular expression string
- /// function_suppression::priv::return_type_regex_str_.
- ///
- /// If that string is empty, then an empty regular expression object
- /// pointer is returned.
- ///
- /// @return a pointer to the regular expression object of
- /// function_suppression::priv::return_type_regex_str_.
- const sptr_utils::regex_t_sptr
- get_return_type_regex() const
- {
- if (!return_type_regex_ && !return_type_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- return_type_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- return_type_regex_ = r;
- }
- return return_type_regex_;
- }
-
- /// Getter for a pointer to a regular expression object built from
- /// the regular expression string
- /// function_suppression::priv::symbol_name_regex_str_.
- ///
- /// If that string is empty, then an empty regular expression object
- /// pointer is returned.
- ///
- /// @return a pointer to the regular expression object of
- /// function_suppression::priv::symbol_name_regex_str_.
- const sptr_utils::regex_t_sptr
- get_symbol_name_regex() const
- {
- if (!symbol_name_regex_ && !symbol_name_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- symbol_name_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- symbol_name_regex_ = r;
- }
- return symbol_name_regex_;
- }
-
- /// Getter for a pointer to a regular expression object built from
- /// the regular expression string
- /// function_suppression::priv::symbol_version_regex_str_.
- ///
- /// If that string is empty, then an empty regular expression object
- /// pointer is returned.
- ///
- /// @return a pointer to the regular expression object of
- /// function_suppression::priv::symbol_version_regex_str_.
- const sptr_utils::regex_t_sptr
- get_symbol_version_regex() const
- {
- if (!symbol_version_regex_ && ! symbol_version_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- symbol_version_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- symbol_version_regex_ = r;
- }
- return symbol_version_regex_;
- }
-}; // end class function_suppression::priv
-
/// Constructor for the @ref function_suppression type.
///
/// @param label an informative text string that the evalution code
///
/// @return the name of the function.
const string&
-function_suppression::get_function_name() const
+function_suppression::get_name() const
{return priv_->name_;}
/// Setter for the name of the function the user wants the current
///
/// @param n the new function name to set.
void
-function_suppression::set_function_name(const string& n)
+function_suppression::set_name(const string& n)
{priv_->name_ = n;}
/// Getter for a regular expression for a family of names of functions
/// the user wants the current specification to designate.
///
-/// If the function name as returned by
-/// function_suppression::get_function_name() is not empty, this
-/// property is ignored at specification evaluation time. This
-/// property might be empty, in which case it's ignored at evaluation
-/// time.
-///
/// @return the regular expression for the possible names of the
/// function(s).
const string&
-function_suppression::get_function_name_regex_str() const
+function_suppression::get_name_regex_str() const
{return priv_->name_regex_str_;}
/// Setter for a regular expression for a family of names of functions
/// the user wants the current specification to designate.
///
-/// If the function name as returned by
-/// function_suppression::get_function_name() is not empty, this
-/// property is ignored at specification evaluation time. This
-/// property might be empty, in which case it's ignored at evaluation
-/// time.
-///
/// @param r the new the regular expression for the possible names of
/// the function(s).
void
-function_suppression::set_function_name_regex_str(const string& r)
+function_suppression::set_name_regex_str(const string& r)
{priv_->name_regex_str_ = r;}
+/// Getter for a regular expression of a family of names of functions
+/// the user wants the current specification to designate the negation
+/// of.
+///
+/// @return the regular expression for the possible names of the
+/// function(s).
+const string&
+function_suppression::get_name_not_regex_str() const
+{return priv_->name_not_regex_str_;}
+
+/// Setter for a regular expression for a family of names of functions
+/// the user wants the current specification to designate the negation
+/// of.
+///
+/// @param r the new the regular expression for the possible names of
+/// the function(s).
+void
+function_suppression::set_name_not_regex_str(const string& r)
+{priv_->name_not_regex_str_ = r;}
+
/// Getter for the name of the return type of the function the user
/// wants this specification to designate. This property might be
/// empty, in which case it's ignored at evaluation time.
if (ctxt)
{
// Check if the name of the binaries match
- if (!names_of_binaries_match(*ctxt))
+ if (!names_of_binaries_match(*this, *ctxt))
return false;
// Check if the soname of the binaries match
- if (!sonames_of_binaries_match(*ctxt))
+ if (!sonames_of_binaries_match(*this, *ctxt))
return false;
}
string fname = fn->get_qualified_name();
// Check if the "name" property matches.
- if (!get_function_name().empty())
+ if (!get_name().empty())
{
- if (get_function_name() != fn->get_qualified_name())
+ if (get_name() != fn->get_qualified_name())
return false;
if (get_allow_other_aliases()
}
}
+ // check if the "name_not_regexp" property matches.
+ const sptr_utils::regex_t_sptr name_not_regex = priv_->get_name_not_regex();
+ if (name_not_regex)
+ {
+ if (regexec(name_not_regex.get(),
+ fname.c_str(),
+ 0, NULL, 0) == 0)
+ return false;
+
+ if (get_allow_other_aliases()
+ && fn->get_symbol()
+ && fn->get_symbol()->get_alias_from_name(fname))
+ {
+ // So we are in a case of a languages in which the symbol
+ // name is the same as the function name and we want to
+ // allow the removal of change reports on an aliased
+ // function only if the suppression condition matches *all*
+ // the aliases.
+ string symbol_name;
+ elf_symbol_sptr sym = fn->get_symbol();
+ assert(sym);
+ symbol_name = sym->get_name();
+ if (sym->has_aliases())
+ {
+ for (elf_symbol_sptr a = sym->get_next_alias();
+ a && !a->is_main_symbol();
+ a = a->get_next_alias())
+ if (regexec(name_regex.get(),
+ a->get_name().c_str(),
+ 0, NULL, 0) == 0)
+ return false;
+ }
+ }
+ }
+
// Check if the "return_type_name" or "return_type_regexp"
// properties matches.
if (ctxt)
{
// Check if the name of the binaries match
- if (!names_of_binaries_match(*ctxt))
+ if (!names_of_binaries_match(*this, *ctxt))
return false;
// Check if the soname of the binaries match
- if (!sonames_of_binaries_match(*ctxt))
+ if (!sonames_of_binaries_match(*this, *ctxt))
return false;
}
(static_cast<unsigned>(l) | static_cast<unsigned>(r));
}
+ /// Test whether if a given function suppression matches a function
+ /// designated by a regular expression that describes its name.
+ ///
+ /// @param s the suppression specification to evaluate to see if it
+ /// matches a given function name.
+ ///
+ /// @param fn_name the name of the function of interest. Note that
+ /// this name must be *non* qualified.
+ ///
+ /// @return true iff the suppression specification @p s matches the
+ /// function whose name is @p fn_name.
+bool
+suppression_matches_function_name(const suppr::function_suppression& s,
+ const string& fn_name)
+{
+ if (sptr_utils::regex_t_sptr regexp = s.priv_->get_name_regex())
+ {
+ if (regexec(regexp.get(), fn_name.c_str(), 0, NULL, 0) != 0)
+ return false;
+ }
+ else if (sptr_utils::regex_t_sptr regexp = s.priv_->get_name_not_regex())
+ {
+ if (regexec(regexp.get(), fn_name.c_str(), 0, NULL, 0) == 0)
+ return false;
+ }
+ else if (s.priv_->name_.empty())
+ return false;
+ else // if (!s.priv_->name_.empty())
+ {
+ if (s.priv_->name_ != fn_name)
+ return false;
+ }
+
+ return true;
+}
+
+/// Test whether if a given function suppression matches a function
+/// designated by a regular expression that describes its linkage
+/// name (symbol name).
+///
+/// @param s the suppression specification to evaluate to see if it
+/// matches a given function linkage name
+///
+/// @param fn_linkage_name the linkage name of the function of interest.
+///
+/// @return true iff the suppression specification @p s matches the
+/// function whose linkage name is @p fn_linkage_name.
+bool
+suppression_matches_function_sym_name(const suppr::function_suppression& s,
+ const string& fn_linkage_name)
+{
+ if (sptr_utils::regex_t_sptr regexp = s.priv_->get_symbol_name_regex())
+ {
+ if (regexec(regexp.get(), fn_linkage_name.c_str(), 0, NULL, 0) != 0)
+ return false;
+ }
+ else if (s.priv_->symbol_name_.empty())
+ return false;
+ else // if (!s.priv_->symbol_name_.empty())
+ {
+ if (s.priv_->symbol_name_ != fn_linkage_name)
+ return false;
+ }
+
+ return true;
+}
+
+/// Test if a variable suppression matches a variable denoted by its name.
+///
+/// @param s the variable suppression to consider.
+///
+/// @param var_name the name of the variable to consider.
+///
+/// @return true if the variable is matches by the suppression
+/// specification.
+bool
+suppression_matches_variable_name(const suppr::variable_suppression& s,
+ const string& var_name)
+{
+ if (sptr_utils::regex_t_sptr regexp = s.priv_->get_name_regex())
+ {
+ if (regexec(regexp.get(), var_name.c_str(), 0, NULL, 0) != 0)
+ return false;
+ }
+ else if (sptr_utils::regex_t_sptr regexp = s.priv_->get_name_not_regex())
+ {
+ if (regexec(regexp.get(), var_name.c_str(), 0, NULL, 0) == 0)
+ return false;
+ }
+ else if (s.priv_->name_.empty())
+ return false;
+ else // if (!s.priv_->name_.empty())
+ {
+ if (s.priv_->name_ != var_name)
+ return false;
+ }
+
+ return true;
+}
+
+/// Test if a variable suppression matches a variable denoted by its
+/// symbol name.
+///
+/// @param s the variable suppression to consider.
+///
+/// @param var_linkage_name the name of the variable to consider.
+///
+/// @return true if the variable is matches by the suppression
+/// specification.
+bool
+suppression_matches_variable_sym_name(const suppr::variable_suppression& s,
+ const string& var_linkage_name)
+{
+ if (sptr_utils::regex_t_sptr regexp = s.priv_->get_symbol_name_regex())
+ {
+ if (regexec(regexp.get(), var_linkage_name.c_str(), 0, NULL, 0) != 0)
+ return false;
+ }
+ else if (s.priv_->symbol_name_.empty())
+ return false;
+ else // if (!s.priv_->symbol_name_.empty())
+ {
+ if (s.priv_->symbol_name_ != var_linkage_name)
+ return false;
+ }
+
+ return true;
+}
+
+/// Test if a type suppression matches a type designated by its fully
+/// qualified name.
+///
+/// @param s the type suppression to consider.
+///
+/// @param type_name the name of the type to consider.
+///
+/// @return true iff the suppression s matches the type denoted by
+/// name @p type_name.
+bool
+suppression_matches_type(const suppr::type_suppression& s,
+ const string& type_name)
+{
+ if (sptr_utils::regex_t_sptr regexp = s.priv_->get_type_name_regex())
+ {
+ if (regexec(regexp.get(), type_name.c_str(), 0, NULL, 0) != 0)
+ return false;
+ }
+ else if (!s.get_type_name().empty())
+ {
+ if (s.get_type_name() != type_name)
+ return false;
+ }
+ else
+ return false;
+
+ return true;
+}
+
/// Parse a string containing a parameter spec, build an instance of
/// function_suppression::parameter_spec from it and return a pointer
/// to that object.
if (section.get_name() != "suppress_function")
return nil;
+ ini::simple_property_sptr drop_artifact =
+ is_simple_property(section.find_property("drop_artifact"));
+ if (!drop_artifact)
+ drop_artifact = is_simple_property(section.find_property("drop"));
+
+ string drop_artifact_str = drop_artifact
+ ? drop_artifact->get_value()->as_string()
+ : "";
+
ini::simple_property_sptr change_kind_prop =
is_simple_property(section.find_property("change_kind"));
string change_kind_str = change_kind_prop
? name_regex_prop->get_value()->as_string()
: "";
+ ini::simple_property_sptr name_not_regex_prop =
+ is_simple_property(section.find_property("name_not_regexp"));
+ string name_not_regex_str = name_not_regex_prop
+ ? name_not_regex_prop->get_value()->as_string()
+ : "";
+
ini::simple_property_sptr return_type_name_prop =
is_simple_property(section.find_property("return_type_name"));
string return_type_name = return_type_name_prop
if (!label_str.empty()
|| !name.empty()
|| !name_regex_str.empty()
+ || !name_not_regex_str.empty()
|| !file_name_regex_str.empty()
|| !file_name_not_regex_str.empty()
|| !soname_regex_str.empty()
sym_name_regex_str,
sym_version,
sym_ver_regex_str));
+
+ if ((drop_artifact_str == "yes" || drop_artifact_str == "true")
+ && (!name.empty()
+ || !name_regex_str.empty()
+ || !name_not_regex_str.empty()
+ || !sym_name.empty()
+ || !sym_name_regex_str.empty()))
+ result->set_drops_artifact_from_ir(true);
+
if (result && !change_kind_str.empty())
result->set_change_kind
(function_suppression::parse_change_kind(change_kind_str));
result->set_allow_other_aliases(allow_other_aliases == "yes"
|| allow_other_aliases == "true");
+ if (!name_not_regex_str.empty())
+ result->set_name_not_regex_str(name_not_regex_str);
+
if (!file_name_regex_str.empty())
result->set_file_name_regex_str(file_name_regex_str);
// <variable_suppression stuff>
-/// The type of the private data of the @ref variable_suppression
-/// type.
-class variable_suppression::priv
-{
- friend class variable_suppression;
-
- change_kind change_kind_;
- string name_;
- string name_regex_str_;
- mutable sptr_utils::regex_t_sptr name_regex_;
- string symbol_name_;
- string symbol_name_regex_str_;
- mutable sptr_utils::regex_t_sptr symbol_name_regex_;
- string symbol_version_;
- string symbol_version_regex_str_;
- mutable sptr_utils::regex_t_sptr symbol_version_regex_;
- string type_name_;
- string type_name_regex_str_;
- mutable sptr_utils::regex_t_sptr type_name_regex_;
-
- priv(const string& name,
- const string& name_regex_str,
- const string& symbol_name,
- const string& symbol_name_regex_str,
- const string& symbol_version,
- const string& symbol_version_regex_str,
- const string& type_name,
- const string& type_name_regex_str)
- : change_kind_(ALL_CHANGE_KIND),
- name_(name),
- name_regex_str_(name_regex_str),
- symbol_name_(symbol_name),
- symbol_name_regex_str_(symbol_name_regex_str),
- symbol_version_(symbol_version),
- symbol_version_regex_str_(symbol_version_regex_str),
- type_name_(type_name),
- type_name_regex_str_(type_name_regex_str)
- {}
-
- /// Getter for a pointer to a regular expression object built from
- /// the regular expression string
- /// variable_suppression::priv::name_regex_str_.
- ///
- /// If that string is empty, then an empty regular expression object
- /// pointer is returned.
- ///
- /// @return a pointer to the regular expression object of
- /// variable_suppression::priv::name_regex_str_.
- const sptr_utils::regex_t_sptr
- get_name_regex() const
- {
- if (!name_regex_ && !name_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- name_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- name_regex_ = r;
- }
- return name_regex_;
- }
-
- /// Getter for a pointer to a regular expression object built from
- /// the regular expression string
- /// variable_suppression::priv::symbol_name_regex_str_.
- ///
- /// If that string is empty, then an empty regular expression object
- /// pointer is returned.
- ///
- /// @return a pointer to the regular expression object of
- /// variable_suppression::priv::symbol_name_regex_str_.
- const sptr_utils::regex_t_sptr
- get_symbol_name_regex() const
- {
- if (!symbol_name_regex_ && !symbol_name_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- symbol_name_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- symbol_name_regex_ = r;
- }
- return symbol_name_regex_;
- }
-
- /// Getter for a pointer to a regular expression object built from
- /// the regular expression string
- /// variable_suppression::priv::symbol_version_regex_str_.
- ///
- /// If that string is empty, then an empty regular expression object
- /// pointer is returned.
- ///
- /// @return a pointer to the regular expression object of
- /// variable_suppression::priv::symbol_version_regex_str_.
- const sptr_utils::regex_t_sptr
- get_symbol_version_regex() const
- {
- if (!symbol_version_regex_ && !symbol_version_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- symbol_version_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- symbol_version_regex_ = r;
- }
- return symbol_version_regex_;
- }
-
- /// Getter for a pointer to a regular expression object built from
- /// the regular expression string
- /// variable_suppression::priv::type_name_regex_str_.
- ///
- /// If that string is empty, then an empty regular expression object
- /// pointer is returned.
- ///
- /// @return a pointer to the regular expression object of
- /// variable_suppression::priv::type_name_regex_str_.
- const sptr_utils::regex_t_sptr
- get_type_name_regex() const
- {
- if (!type_name_regex_ && !type_name_regex_str_.empty())
- {
- sptr_utils::regex_t_sptr r = sptr_utils::build_sptr<regex_t>();
- if (regcomp(r.get(),
- type_name_regex_str_.c_str(),
- REG_EXTENDED) == 0)
- type_name_regex_ = r;
- }
- return type_name_regex_;
- }
-};// end class variable_supppression::priv
-
/// Constructor for the @ref variable_suppression type.
///
/// @param label an informative text string that the evalution code
variable_suppression::set_name_regex_str(const string& r)
{priv_->name_regex_str_ = r;}
+/// Getter for the "name_not_regexp" property of the specification.
+///
+/// @return the value of the "name_not_regexp" property.
+const string&
+variable_suppression::get_name_not_regex_str() const
+{return priv_->name_not_regex_str_;}
+
+/// Setter for the "name_not_regexp" property of the specification.
+///
+/// @param r the new value of the "name_not_regexp" property.
+void
+variable_suppression::set_name_not_regex_str(const string& r)
+{priv_->name_not_regex_str_ = r;}
+
/// Getter for the name of the symbol of the variable the user wants
/// the current specification to designate.
///
if (ctxt)
{
// Check if the name of the binaries match
- if (!names_of_binaries_match(*ctxt))
+ if (!names_of_binaries_match(*this, *ctxt))
return false;
// Check if the soname of the binaries match
- if (!sonames_of_binaries_match(*ctxt))
+ if (!sonames_of_binaries_match(*this, *ctxt))
return false;
}
string var_name = var->get_qualified_name();
- // Check for "name" property match.
+ // Check for "name" property match.
if (!get_name().empty())
{
if (get_name() != var_name)
else
{
// If the "name" property is empty, then consider checking for the
- // "name_regex" property match
+ // "name_regex" and "name_not_regex" properties match
if (get_name().empty())
{
const sptr_utils::regex_t_sptr name_regex = priv_->get_name_regex();
&& (regexec(name_regex.get(), var_name.c_str(),
0, NULL, 0) != 0))
return false;
+
+ const sptr_utils::regex_t_sptr name_not_regex =
+ priv_->get_name_not_regex();
+ if (name_not_regex
+ && (regexec(name_not_regex.get(), var_name.c_str(),
+ 0, NULL, 0) == 0))
+ return false;
}
}
if (ctxt)
{
// Check if the name of the binaries match
- if (!names_of_binaries_match(*ctxt))
+ if (!names_of_binaries_match(*this, *ctxt))
return false;
// Check if the soname of the binaries match
- if (!sonames_of_binaries_match(*ctxt))
+ if (!sonames_of_binaries_match(*this, *ctxt))
return false;
}
if (section.get_name() != "suppress_variable")
return result;
+ ini::simple_property_sptr drop_artifact =
+ is_simple_property(section.find_property("drop_artifact"));
+ if (!drop_artifact)
+ drop_artifact = is_simple_property(section.find_property("drop"));
+
+ string drop_artifact_str = drop_artifact
+ ? drop_artifact->get_value()->as_string()
+ : "";
+
ini::simple_property_sptr change_kind_prop =
is_simple_property(section.find_property("change_kind"));
string change_kind_str = change_kind_prop
? name_regex_prop->get_value()->as_string()
: "");
+ ini::simple_property_sptr name_not_regex_prop =
+ is_simple_property(section.find_property("name_not_regexp"));
+ string name_not_regex_str = name_not_regex_prop
+ ? name_not_regex_prop->get_value()->as_string()
+ : "";
+
ini::simple_property_sptr sym_name_prop =
is_simple_property(section.find_property("symbol_name"));
string symbol_name = (sym_name_prop
if (label_str.empty()
&& name_str.empty()
&& name_regex_str.empty()
+ && name_not_regex_str.empty()
&& file_name_regex_str.empty()
&& file_name_not_regex_str.empty()
&& soname_regex_str.empty()
symbol_version, symbol_version_regex_str,
type_name_str, type_name_regex_str));
+ if ((drop_artifact_str == "yes" || drop_artifact_str == "true")
+ && (!name_str.empty()
+ || !name_regex_str.empty()
+ || !name_not_regex_str.empty()
+ || !symbol_name.empty()
+ || !symbol_name_regex_str.empty()))
+ result->set_drops_artifact_from_ir(true);
+
+ if (!name_not_regex_str.empty())
+ result->set_name_not_regex_str(name_not_regex_str);
+
if (result && !change_kind_str.empty())
result->set_change_kind
(variable_suppression::parse_change_kind(change_kind_str));
/*type_name_regexp=*/"",
/*type_name=*/""));
suppr->set_is_artificial(true);
+ suppr->set_drops_artifact_from_ir(true);
suppr->get_source_locations_to_keep().insert(fname);
}
}
unsigned);
static bool write_type_decl(const shared_ptr<type_decl>,
write_context&, unsigned);
-static bool write_namespace_decl(const shared_ptr<namespace_decl>,
+static bool write_namespace_decl(const namespace_decl_sptr&,
write_context&, unsigned);
static bool write_qualified_type_def(const shared_ptr<qualified_type_def>,
write_context&, unsigned);
///
/// @return true upon successful completion, false otherwise.
static bool
-write_namespace_decl(const shared_ptr<namespace_decl> decl,
+write_namespace_decl(const namespace_decl_sptr& decl,
write_context& ctxt, unsigned indent)
{
if (!decl || decl->is_empty_or_has_empty_sub_namespaces())
test-read-write/test25.xml \
test-read-write/test26.xml \
test-read-write/test27.xml \
+test-read-write/test28.xml \
+test-read-write/test28-drop-std-fns.abignore \
+test-read-write/test28-without-std-fns.xml \
+test-read-write/test28-without-std-fns-ref.xml \
+test-read-write/test28-drop-std-vars.abignore \
+test-read-write/test28-without-std-vars-ref.xml \
+test-read-write/test28-without-std-vars.xml \
\
test-write-read-archive/test0.xml \
test-write-read-archive/test1.xml \
test-read-dwarf/libtest23.so \
test-read-dwarf/libtest23.so.abi \
test-read-dwarf/test23-first-tu.cc \
-test-read-dwarf/test23-first-tu.cc \
+test-read-dwarf/libtest24-drop-fns-2.so.abi \
+test-read-dwarf/libtest24-drop-fns.so \
+test-read-dwarf/libtest24-drop-fns.so.abi \
+test-read-dwarf/test24-drop-fns-0.suppr \
+test-read-dwarf/test24-drop-fns.cc \
\
test-types-stability/pr19434-elf0 \
test-types-stability/pr19139-DomainNeighborMapInst.o \
test-diff-suppr/test30-pub-lib-v1.so \
test-diff-suppr/test30-report-0.txt \
test-diff-suppr/test30-report-1.txt \
+test-diff-suppr/libtest31-v0.so \
+test-diff-suppr/libtest31-v1.so \
+test-diff-suppr/libtest31.suppr \
+test-diff-suppr/test31-report-0.txt \
+test-diff-suppr/test31-report-1.txt \
+test-diff-suppr/test31-v0.cc \
+test-diff-suppr/test31-v1.cc \
+test-diff-suppr/libtest32-v0.so \
+test-diff-suppr/libtest32-v1.so \
+test-diff-suppr/libtest32-0.suppr \
+test-diff-suppr/test32-report-0.txt \
+test-diff-suppr/test32-report-1.txt \
+test-diff-suppr/test32-v0.c \
+test-diff-suppr/test32-v1.c \
+test-diff-suppr/libtest33-v0.so \
+test-diff-suppr/libtest33-v1.so \
+test-diff-suppr/test33-suppr-1.txt \
+test-diff-suppr/test33-v0.cc \
+test-diff-suppr/test33-v0.h \
+test-diff-suppr/test33-v1.cc \
+test-diff-suppr/test33-v1.h \
\
test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1 \
test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi \
--- /dev/null
+[suppress_function]
+ drop = yes
+ name_regexp = hidden::.*
--- /dev/null
+[suppress_function]
+ name_not_regexp = ^pub::.*
+ drop_artifact = true
[suppress_type]
- file_name_regexp = ^libtest24-soname-v0.so$
+ file_name_regexp = .*/libtest24-soname-v0.so$
name = S
reached_through = reference_or_pointer
[suppress_type]
- file_name_regexp = ^libtest24-soname-v1.so$
+ file_name_regexp = .*/libtest24-soname-v1.so$
name = S
reached_through = reference_or_pointer
[suppress_variable]
- file_name_not_regexp = ^libtest29-soname.*\\.so$
+ file_name_not_regexp = .*libtest29-soname.*\\.so$
[suppress_type]
- file_name_not_regexp = ^libtest29-soname.*\\.so$
+ file_name_not_regexp = .*libtest29-soname.*\\.so$
--- /dev/null
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+ [C]'function void hidden::foo(hidden::S0&)' has some indirect sub-type changes:
+ parameter 1 of type 'hidden::S0&' has sub-type changes:
+ in referenced type 'struct hidden::S0':
+ type size changed from 32 to 64 bits
+ 1 data member insertion:
+ 'char hidden::S0::m1', at offset 32 (in bits)
+
+
--- /dev/null
+// Compile with:
+// g++ -g -Wall -fPIC -shared -o libtest31-v0.so test31-v0.cc
+
+namespace hidden
+{
+
+struct S0
+{
+ int m0;
+
+ S0() {}
+
+ S0(int v)
+ : m0(v)
+ {}
+};
+
+void
+foo(S0& s)
+{
+ s.m0 = 2;
+}
+
+} // end namespace hidden
+
+namespace visible
+{
+void
+bar(int v)
+{
+ hidden::S0 s(v);
+ hidden::foo(s);
+}
+
+} // end namespace visible
--- /dev/null
+// Compile with:
+// g++ -g -Wall -fPIC -shared -o libtest31-v1.so test31-v1.cc
+
+namespace hidden
+{
+
+struct S0
+{
+ int m0;
+ char m1;
+
+ S0()
+ : m0(), m1()
+ {}
+
+ S0(int v)
+ : m0(v),
+ m1()
+ {}
+};
+
+void
+foo(S0& s)
+{
+ s.m0 = 2;
+ s.m1 = 1;
+}
+
+} // end namespace hidden
+
+namespace visible
+{
+void
+bar(int v)
+{
+ hidden::S0 s(v);
+ hidden::foo(s);
+}
+
+} // end namespace visible
--- /dev/null
+Functions changes summary: 0 Removed, 2 Changed, 0 Added functions
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+2 functions with some indirect sub-type change:
+
+ [C]'function void priv::foo()' has some indirect sub-type changes:
+ return type changed:
+ type name changed from 'void' to 'int'
+ type size changed from 0 to 32 bits
+
+ [C]'function void pub::bar()' has some indirect sub-type changes:
+ return type changed:
+ type name changed from 'void' to 'char'
+ type size changed from 0 to 8 bits
+
+
--- /dev/null
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+ [C]'function void pub::bar()' has some indirect sub-type changes:
+ return type changed:
+ type name changed from 'void' to 'char'
+ type size changed from 0 to 8 bits
+
+
--- /dev/null
+// Compile with:
+// g++ -g -fPIC -shared -o libtest32-v0.so test32-v0.c
+
+namespace priv
+{
+ void foo() {}
+}
+
+namespace pub
+{
+ void bar() {}
+}
--- /dev/null
+// Compile with:
+// g++ -g -fPIC -shared -o libtest32-v1.so test32-v1.c
+
+namespace priv
+{
+ int foo() {return 0;}
+}
+
+namespace pub
+{
+ char bar() {return 0;}
+}
--- /dev/null
+[suppress_type]
+ type_kind = class
+ source_location_not_regexp = test33-v\[0-9\]*\\.h
+ drop = true
--- /dev/null
+/// to compile this:
+/// g++ -g -fPIC -shared -o libtest33-v0.so test33-v0.cc
+
+#include "test33-v0.h"
+
+class to_suppress
+{
+ int method1();
+ char method2();
+};
+
+int
+to_suppress::method1()
+{return 0;}
+
+char
+to_suppress::method2()
+{return 0;}
+
+void
+to_keep::method1()
+{}
+
+void
+to_keep::method2()
+{}
+
+void
+foo(to_suppress&)
+{}
+
+void
+bar(to_keep&)
+{}
--- /dev/null
+class to_keep
+{
+ void method1();
+ void method2();
+};
+
+void bar(to_keep&);
--- /dev/null
+/// to compile this:
+/// g++ -g -fPIC -shared -o libtest33-v1.so test33-v1.cc
+
+#include "test33-v1.h"
+
+class to_suppress
+{
+ int member1;
+
+ void method1();
+ char method2();
+};
+
+void
+to_suppress::method1()
+{}
+
+char
+to_suppress::method2()
+{return 0;}
+
+void
+to_keep::method1()
+{}
+
+void
+to_keep::method2()
+{}
+
+void
+foo(to_suppress&)
+{}
+
+void
+bar(to_keep&)
+{}
--- /dev/null
+class to_keep
+{
+ int member1;
+
+ void method1();
+ void method2();
+};
+
+void bar(to_keep&);
--- /dev/null
+<abi-corpus path='data/test-read-dwarf/libtest24-drop-fns.so'>
+ <elf-needed>
+ <dependency name='libgcc_s.so.1'/>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='_Z3barRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_Z3fooRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_ZNSt11char_traitsIcE6lengthEPKc' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_fini' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_init' type='func-type' binding='global-binding' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test24-drop-fns.cc' language='LANG_C_plus_plus'>
+ <namespace-decl name='std'>
+
+ <class-decl name='basic_ostream<char, std::char_traits<char> >' visibility='default' is-declaration-only='yes' id='type-id-1'/>
+ <typedef-decl name='ostream' type-id='type-id-1' filepath='/usr/include/c++/5.3.1/iosfwd' line='141' column='1' id='type-id-2'/>
+ <var-decl name='cout' type-id='type-id-2' mangled-name='_ZSt4cout' visibility='default' filepath='/usr/include/c++/5.3.1/iostream' line='61' column='1'/>
+ <class-decl name='basic_string<char, std::char_traits<char>, std::allocator<char> >' size-in-bits='64' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2510' column='1' id='type-id-3'>
+ <member-type access='private'>
+ <class-decl name='_Alloc_hider' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2670' column='1' id='type-id-4'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-5'/>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_p' type-id='type-id-6' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2675' column='1'/>
+ </data-member>
+ <member-function access='public' constructor='yes'>
+ <function-decl name='_Alloc_hider' mangled-name='_ZNSs12_Alloc_hiderC4EPcRKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2672' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-7' is-artificial='yes'/>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-11' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2519' column='1' id='type-id-10'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='allocator_type' type-id='type-id-5' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2518' column='1' id='type-id-12'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-14' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2521' column='1' id='type-id-13'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-16' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2522' column='1' id='type-id-15'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='iterator' type-id='type-id-18' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2525' column='1' id='type-id-17'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_iterator' type-id='type-id-20' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2527' column='1' id='type-id-19'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reverse_iterator' type-id='type-id-22' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2528' column='1' id='type-id-21'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reverse_iterator' type-id='type-id-24' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2529' column='1' id='type-id-23'/>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2546' column='1' id='type-id-25'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_length' type-id='type-id-10' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2548' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='_M_capacity' type-id='type-id-10' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2549' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='_M_refcount' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2550' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2553' column='1' id='type-id-27'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-25'/>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_max_size' type-id='type-id-28' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='494' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_terminal' type-id='type-id-29' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='499' column='1'/>
+ </data-member>
+ <member-function access='public' static='yes'>
+ <function-decl name='_S_empty_rep' mangled-name='_ZNSs4_Rep12_S_empty_repEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2579' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-30'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_is_leaked' mangled-name='_ZNKSs4_Rep12_M_is_leakedEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2589' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-31' is-artificial='yes'/>
+ <return type-id='type-id-32'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_is_shared' mangled-name='_ZNKSs4_Rep12_M_is_sharedEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2593' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-31' is-artificial='yes'/>
+ <return type-id='type-id-32'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_set_leaked' mangled-name='_ZNSs4_Rep13_M_set_leakedEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2597' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_set_sharable' mangled-name='_ZNSs4_Rep15_M_set_sharableEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2601' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_set_length_and_sharable' mangled-name='_ZNSs4_Rep26_M_set_length_and_sharableEm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2605' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_refdata' mangled-name='_ZNSs4_Rep10_M_refdataEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2620' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_grab' mangled-name='_ZNSs4_Rep7_M_grabERKSaIcES2_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2624' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <parameter type-id='type-id-8'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='_S_create' mangled-name='_ZNSs4_Rep9_S_createEmmRKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='989' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-33'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_dispose' mangled-name='_ZNSs4_Rep10_M_disposeERKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2635' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_destroy' mangled-name='_ZNSs4_Rep10_M_destroyERKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='888' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_refcopy' mangled-name='_ZNSs4_Rep10_M_refcopyEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2656' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='_M_clone' mangled-name='_ZNSs4_Rep8_M_cloneERKSaIcEm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1067' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-33' is-artificial='yes'/>
+ <parameter type-id='type-id-8'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ </member-type>
+ <data-member access='public' static='yes'>
+ <var-decl name='npos' type-id='type-id-28' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2683' column='1'/>
+ </data-member>
+ <data-member access='private' layout-offset-in-bits='0'>
+ <var-decl name='_M_dataplus' type-id='type-id-4' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2687' column='1'/>
+ </data-member>
+ <member-function access='private'>
+ <function-decl name='_M_data' mangled-name='_ZNKSs7_M_dataEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2690' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_data' mangled-name='_ZNSs7_M_dataEPc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2694' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-6'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_rep' mangled-name='_ZNKSs6_M_repEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2698' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-33'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_ibegin' mangled-name='_ZNKSs9_M_ibeginEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2704' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-17'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_iend' mangled-name='_ZNKSs7_M_iendEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2708' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-17'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_leak' mangled-name='_ZNSs7_M_leakEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2712' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_check' mangled-name='_ZNKSs8_M_checkEmPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2719' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_check_length' mangled-name='_ZNKSs15_M_check_lengthEmmPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2729' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_limit' mangled-name='_ZNKSs8_M_limitEmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2737' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_disjunct' mangled-name='_ZNKSs11_M_disjunctEPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2745' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-32'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_M_copy' mangled-name='_ZNSs7_M_copyEPcPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2754' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_M_move' mangled-name='_ZNSs7_M_moveEPcPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2763' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_M_assign' mangled-name='_ZNSs9_M_assignEPcmc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2772' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_S_copy_chars' mangled-name='_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2792' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_S_copy_chars' mangled-name='_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2796' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-19'/>
+ <parameter type-id='type-id-19'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_S_copy_chars' mangled-name='_ZNSs13_S_copy_charsEPcS_S_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2801' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-6'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_S_copy_chars' mangled-name='_ZNSs13_S_copy_charsEPcPKcS1_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2805' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_S_compare' mangled-name='_ZNSs10_S_compareEmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2810' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_mutate' mangled-name='_ZNSs9_M_mutateEmmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='912' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_leak_hard' mangled-name='_ZNSs12_M_leak_hardEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='898' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_S_empty_rep' mangled-name='_ZNSs12_S_empty_repEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2829' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-30'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='basic_string' mangled-name='_ZNSsC4Ev' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2840' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='basic_string' mangled-name='_ZNSsC4ERKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='621' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='basic_string' mangled-name='_ZNSsC4ERKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='613' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='basic_string' mangled-name='_ZNSsC4ERKSsmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='627' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='basic_string' mangled-name='_ZNSsC4ERKSsmmRKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='637' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='basic_string' mangled-name='_ZNSsC4EPKcmRKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='649' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='basic_string' mangled-name='_ZNSsC4EPKcRKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='656' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='basic_string' mangled-name='_ZNSsC4EmcRKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='663' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~basic_string' mangled-name='_ZNSsD4Ev' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2944' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-38' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='operator=' mangled-name='_ZNSsaSERKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2952' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='operator=' mangled-name='_ZNSsaSEPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2960' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='operator=' mangled-name='_ZNSsaSEc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2971' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='begin' mangled-name='_ZNSs5beginEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3012' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <return type-id='type-id-17'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='begin' mangled-name='_ZNKSs5beginEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3023' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-19'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='end' mangled-name='_ZNSs3endEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3031' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <return type-id='type-id-17'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='end' mangled-name='_ZNKSs3endEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3042' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-19'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='rbegin' mangled-name='_ZNSs6rbeginEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3051' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <return type-id='type-id-23'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='rbegin' mangled-name='_ZNKSs6rbeginEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3060' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-21'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='rend' mangled-name='_ZNSs4rendEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3069' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <return type-id='type-id-23'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='rend' mangled-name='_ZNKSs4rendEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3078' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-21'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='size' mangled-name='_ZNKSs4sizeEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3122' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='length' mangled-name='_ZNKSs6lengthEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3128' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='max_size' mangled-name='_ZNKSs8max_sizeEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3133' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='resize' mangled-name='_ZNSs6resizeEmc' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1083' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='resize' mangled-name='_ZNSs6resizeEm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3160' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='capacity' mangled-name='_ZNKSs8capacityEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3185' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='reserve' mangled-name='_ZNSs7reserveEm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='945' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='clear' mangled-name='_ZNSs5clearEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3213' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='empty' mangled-name='_ZNKSs5emptyEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3221' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-32'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='operator[]' mangled-name='_ZNKSsixEm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3236' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-15'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='operator[]' mangled-name='_ZNSsixEm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3253' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-13'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='at' mangled-name='_ZNKSs2atEm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3275' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-15'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='at' mangled-name='_ZNSs2atEm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3297' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-13'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='operator+=' mangled-name='_ZNSspLERKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3349' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='operator+=' mangled-name='_ZNSspLEPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3358' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='operator+=' mangled-name='_ZNSspLEc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3367' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='append' mangled-name='_ZNSs6appendERKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='768' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='append' mangled-name='_ZNSs6appendERKSsmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='785' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='append' mangled-name='_ZNSs6appendEPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='741' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='append' mangled-name='_ZNSs6appendEPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3423' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='append' mangled-name='_ZNSs6appendEmc' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='724' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='push_back' mangled-name='_ZNSs9push_backEc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3469' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='assign' mangled-name='_ZNSs6assignERKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='686' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='assign' mangled-name='_ZNSs6assignERKSsmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3518' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='assign' mangled-name='_ZNSs6assignEPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='702' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='assign' mangled-name='_ZNSs6assignEPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3546' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='assign' mangled-name='_ZNSs6assignEmc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3562' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='insert' mangled-name='_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEmc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3603' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='insert' mangled-name='_ZNSs6insertEmRKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3651' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='insert' mangled-name='_ZNSs6insertEmRKSsmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3673' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='insert' mangled-name='_ZNSs6insertEmPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='803' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='insert' mangled-name='_ZNSs6insertEmPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3714' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='insert' mangled-name='_ZNSs6insertEmmc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3737' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='insert' mangled-name='_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3755' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-17'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='erase' mangled-name='_ZNSs5eraseEmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3780' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='erase' mangled-name='_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3796' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <return type-id='type-id-17'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='erase' mangled-name='_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='834' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <return type-id='type-id-17'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEmmRKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3847' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEmmRKSsmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3869' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEmmPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='857' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEmmPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3914' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEmmmc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3938' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3956' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3975' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='3996' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_mc' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4017' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4054' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-6'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4064' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4075' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='replace' mangled-name='_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4085' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-17'/>
+ <parameter type-id='type-id-19'/>
+ <parameter type-id='type-id-19'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_replace_aux' mangled-name='_ZNSs14_M_replace_auxEmmmc' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1111' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private'>
+ <function-decl name='_M_replace_safe' mangled-name='_ZNSs15_M_replace_safeEmmPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1124' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_S_construct_aux_2' mangled-name='_ZNSs18_S_construct_aux_2EmcRKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4156' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ </member-function>
+ <member-function access='private' static='yes'>
+ <function-decl name='_S_construct' mangled-name='_ZNSs12_S_constructEmcRKSaIcE' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='596' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='copy' mangled-name='_ZNKSs4copyEPcmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1136' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='swap' mangled-name='_ZNSs4swapERSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='962' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-35' is-artificial='yes'/>
+ <parameter type-id='type-id-40'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='c_str' mangled-name='_ZNKSs5c_strEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4219' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='data' mangled-name='_ZNKSs4dataEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4229' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='get_allocator' mangled-name='_ZNKSs13get_allocatorEv' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4236' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-12'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find' mangled-name='_ZNKSs4findEPKcmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1181' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find' mangled-name='_ZNKSs4findERKSsm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4265' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find' mangled-name='_ZNKSs4findEPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4280' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find' mangled-name='_ZNKSs4findEcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1204' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='rfind' mangled-name='_ZNKSs5rfindERKSsm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4310' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='rfind' mangled-name='_ZNKSs5rfindEPKcmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1222' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='rfind' mangled-name='_ZNKSs5rfindEPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4340' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='rfind' mangled-name='_ZNKSs5rfindEcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1243' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_first_of' mangled-name='_ZNKSs13find_first_ofERKSsm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4371' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_first_of' mangled-name='_ZNKSs13find_first_ofEPKcmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1260' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_first_of' mangled-name='_ZNKSs13find_first_ofEPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4401' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_first_of' mangled-name='_ZNKSs13find_first_ofEcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4420' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_last_of' mangled-name='_ZNKSs12find_last_ofERKSsm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4435' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_last_of' mangled-name='_ZNKSs12find_last_ofEPKcmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1275' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_last_of' mangled-name='_ZNKSs12find_last_ofEPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4465' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_last_of' mangled-name='_ZNKSs12find_last_ofEcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4484' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_first_not_of' mangled-name='_ZNKSs17find_first_not_ofERKSsm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4498' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_first_not_of' mangled-name='_ZNKSs17find_first_not_ofEPKcmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1296' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_first_not_of' mangled-name='_ZNKSs17find_first_not_ofEPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4529' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_first_not_of' mangled-name='_ZNKSs17find_first_not_ofEcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1308' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_last_not_of' mangled-name='_ZNKSs16find_last_not_ofERKSsm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4561' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_last_not_of' mangled-name='_ZNKSs16find_last_not_ofEPKcmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1319' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_last_not_of' mangled-name='_ZNKSs16find_last_not_ofEPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4592' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='find_last_not_of' mangled-name='_ZNKSs16find_last_not_ofEcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1340' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-10'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='substr' mangled-name='_ZNKSs6substrEmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4625' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-3'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='compare' mangled-name='_ZNKSs7compareERKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='4644' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='compare' mangled-name='_ZNKSs7compareEmmRKSs' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1360' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='compare' mangled-name='_ZNKSs7compareEmmRKSsmm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1375' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='compare' mangled-name='_ZNKSs7compareEPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1393' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='compare' mangled-name='_ZNKSs7compareEmmPKc' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1408' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='compare' mangled-name='_ZNKSs7compareEmmPKcm' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1424' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-10'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-10'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-5'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-41'/>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-42' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='95' column='1' id='type-id-11'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-43' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='99' column='1' id='type-id-14'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-44' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='100' column='1' id='type-id-16'/>
+ </member-type>
+ <member-function access='public'>
+ <function-decl name='allocator' mangled-name='_ZNSaIcEC4Ev' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-45' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='allocator' mangled-name='_ZNSaIcEC4ERKS_' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='115' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-45' is-artificial='yes'/>
+ <parameter type-id='type-id-8'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~allocator' mangled-name='_ZNSaIcED4Ev' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='121' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-45' is-artificial='yes'/>
+ <parameter type-id='type-id-38' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <typedef-decl name='size_t' type-id='type-id-46' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/c++config.h' line='1969' column='1' id='type-id-42'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-22'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-24'/>
+ <function-decl name='operator+<char, std::char_traits<char>, std::allocator<char> >' mangled-name='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='1151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_'>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-3'/>
+ </function-decl>
+ <class-decl name='char_traits<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='233' column='1' id='type-id-47'>
+ <member-type access='public'>
+ <typedef-decl name='char_type' type-id='type-id-37' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='235' column='1' id='type-id-48'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='int_type' type-id='type-id-38' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='236' column='1' id='type-id-49'/>
+ </member-type>
+ <member-function access='public' static='yes'>
+ <function-decl name='assign' mangled-name='_ZNSt11char_traitsIcE6assignERcRKc' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='242' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-50'/>
+ <parameter type-id='type-id-51'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='eq' mangled-name='_ZNSt11char_traitsIcE2eqERKcS2_' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='246' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-51'/>
+ <parameter type-id='type-id-51'/>
+ <return type-id='type-id-32'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='lt' mangled-name='_ZNSt11char_traitsIcE2ltERKcS2_' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='250' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-51'/>
+ <parameter type-id='type-id-51'/>
+ <return type-id='type-id-32'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='compare' mangled-name='_ZNSt11char_traitsIcE7compareEPKcS2_m' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='258' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-52'/>
+ <parameter type-id='type-id-52'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='length' mangled-name='_ZNSt11char_traitsIcE6lengthEPKc' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_ZNSt11char_traitsIcE6lengthEPKc'>
+ <parameter type-id='type-id-52'/>
+ <return type-id='type-id-42'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='find' mangled-name='_ZNSt11char_traitsIcE4findEPKcmRS1_' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='270' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-52'/>
+ <parameter type-id='type-id-42'/>
+ <parameter type-id='type-id-51'/>
+ <return type-id='type-id-52'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='move' mangled-name='_ZNSt11char_traitsIcE4moveEPcPKcm' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='278' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-53'/>
+ <parameter type-id='type-id-52'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-53'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='copy' mangled-name='_ZNSt11char_traitsIcE4copyEPcPKcm' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='286' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-53'/>
+ <parameter type-id='type-id-52'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-53'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='assign' mangled-name='_ZNSt11char_traitsIcE6assignEPcmc' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='294' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-53'/>
+ <parameter type-id='type-id-42'/>
+ <parameter type-id='type-id-48'/>
+ <return type-id='type-id-53'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='to_char_type' mangled-name='_ZNSt11char_traitsIcE12to_char_typeERKi' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='302' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-54'/>
+ <return type-id='type-id-48'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='to_int_type' mangled-name='_ZNSt11char_traitsIcE11to_int_typeERKc' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='308' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-51'/>
+ <return type-id='type-id-49'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='eq_int_type' mangled-name='_ZNSt11char_traitsIcE11eq_int_typeERKiS2_' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='312' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-54'/>
+ <parameter type-id='type-id-54'/>
+ <return type-id='type-id-32'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='eof' mangled-name='_ZNSt11char_traitsIcE3eofEv' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='316' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-49'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' static='yes'>
+ <function-decl name='not_eof' mangled-name='_ZNSt11char_traitsIcE7not_eofERKi' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='320' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-54'/>
+ <return type-id='type-id-49'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <typedef-decl name='string' type-id='type-id-3' filepath='/usr/include/c++/5.3.1/bits/stringfwd.h' line='74' column='1' id='type-id-55'/>
+ </namespace-decl>
+ <namespace-decl name='__gnu_cxx'>
+
+ <class-decl name='new_allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='58' column='1' id='type-id-41'>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-42' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='61' column='1' id='type-id-56'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='pointer' type-id='type-id-6' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='63' column='1' id='type-id-57'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_pointer' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='64' column='1' id='type-id-58'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-43' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='65' column='1' id='type-id-59'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-44' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='66' column='1' id='type-id-60'/>
+ </member-type>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-61' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4ERKS1_' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-61' is-artificial='yes'/>
+ <parameter type-id='type-id-62'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcED4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-61' is-artificial='yes'/>
+ <parameter type-id='type-id-38' is-artificial='yes'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-63' is-artificial='yes'/>
+ <parameter type-id='type-id-59'/>
+ <return type-id='type-id-57'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-63' is-artificial='yes'/>
+ <parameter type-id='type-id-60'/>
+ <return type-id='type-id-58'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='allocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-61' is-artificial='yes'/>
+ <parameter type-id='type-id-56'/>
+ <parameter type-id='type-id-64'/>
+ <return type-id='type-id-57'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='deallocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-61' is-artificial='yes'/>
+ <parameter type-id='type-id-57'/>
+ <parameter type-id='type-id-56'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='max_size' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-63' is-artificial='yes'/>
+ <return type-id='type-id-56'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='construct' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-61' is-artificial='yes'/>
+ <parameter type-id='type-id-57'/>
+ <parameter type-id='type-id-44'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='destroy' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE7destroyEPc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-61' is-artificial='yes'/>
+ <parameter type-id='type-id-57'/>
+ <return type-id='type-id-9'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <class-decl name='__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-18'/>
+ <class-decl name='__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-20'/>
+ <class-decl name='__numeric_traits_integer<int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-65'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-66' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-66' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-67' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-66' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long unsigned int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-68'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-69' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-69' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-67' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-66' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-70'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-29' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-29' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-67' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-66' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<short int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-71'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-72' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-72' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-67' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-66' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-73'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-74' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-74' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-67' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-66' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ </namespace-decl>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-46'/>
+ <type-decl name='char' size-in-bits='8' id='type-id-37'/>
+ <pointer-type-def type-id='type-id-37' size-in-bits='64' id='type-id-6'/>
+ <qualified-type-def type-id='type-id-37' const='yes' id='type-id-29'/>
+ <pointer-type-def type-id='type-id-29' size-in-bits='64' id='type-id-36'/>
+ <reference-type-def kind='lvalue' type-id='type-id-37' size-in-bits='64' id='type-id-43'/>
+ <reference-type-def kind='lvalue' type-id='type-id-29' size-in-bits='64' id='type-id-44'/>
+ <type-decl name='void' id='type-id-9'/>
+ <pointer-type-def type-id='type-id-41' size-in-bits='64' id='type-id-61'/>
+ <qualified-type-def type-id='type-id-41' const='yes' id='type-id-75'/>
+ <reference-type-def kind='lvalue' type-id='type-id-75' size-in-bits='64' id='type-id-62'/>
+ <type-decl name='int' size-in-bits='32' id='type-id-38'/>
+ <pointer-type-def type-id='type-id-75' size-in-bits='64' id='type-id-63'/>
+ <pointer-type-def type-id='type-id-9' size-in-bits='64' id='type-id-64'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-45'/>
+ <qualified-type-def type-id='type-id-5' const='yes' id='type-id-76'/>
+ <reference-type-def kind='lvalue' type-id='type-id-76' size-in-bits='64' id='type-id-8'/>
+ <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-7'/>
+ <qualified-type-def type-id='type-id-10' const='yes' id='type-id-28'/>
+ <typedef-decl name='_Atomic_word' type-id='type-id-38' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/atomic_word.h' line='32' column='1' id='type-id-26'/>
+ <reference-type-def kind='lvalue' type-id='type-id-27' size-in-bits='64' id='type-id-30'/>
+ <type-decl name='bool' size-in-bits='8' id='type-id-32'/>
+ <qualified-type-def type-id='type-id-27' const='yes' id='type-id-77'/>
+ <pointer-type-def type-id='type-id-77' size-in-bits='64' id='type-id-31'/>
+ <pointer-type-def type-id='type-id-27' size-in-bits='64' id='type-id-33'/>
+ <qualified-type-def type-id='type-id-3' const='yes' id='type-id-78'/>
+ <pointer-type-def type-id='type-id-78' size-in-bits='64' id='type-id-34'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-35'/>
+ <reference-type-def kind='lvalue' type-id='type-id-78' size-in-bits='64' id='type-id-39'/>
+ <reference-type-def kind='lvalue' type-id='type-id-3' size-in-bits='64' id='type-id-40'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-79'/>
+ <typedef-decl name='wint_t' type-id='type-id-79' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='357' column='1' id='type-id-80'/>
+ <function-decl name='btowc' filepath='/usr/include/wchar.h' line='353' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-81'/>
+ <typedef-decl name='__FILE' type-id='type-id-81' filepath='/usr/include/stdio.h' line='64' column='1' id='type-id-82'/>
+ <pointer-type-def type-id='type-id-82' size-in-bits='64' id='type-id-83'/>
+ <function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-83'/>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <type-decl name='wchar_t' size-in-bits='32' id='type-id-84'/>
+ <pointer-type-def type-id='type-id-84' size-in-bits='64' id='type-id-85'/>
+ <function-decl name='fgetws' filepath='/usr/include/wchar.h' line='774' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-38'/>
+ <parameter type-id='type-id-83'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='fputwc' filepath='/usr/include/wchar.h' line='759' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-83'/>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-84' const='yes' id='type-id-86'/>
+ <pointer-type-def type-id='type-id-86' size-in-bits='64' id='type-id-87'/>
+ <function-decl name='fputws' filepath='/usr/include/wchar.h' line='781' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-83'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='fwide' filepath='/usr/include/wchar.h' line='587' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-83'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='fwprintf' filepath='/usr/include/wchar.h' line='594' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-83'/>
+ <parameter type-id='type-id-87'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='fwscanf' filepath='/usr/include/wchar.h' line='635' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-83'/>
+ <parameter type-id='type-id-87'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='getwc' filepath='/usr/include/wchar.h' line='746' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-83'/>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <function-decl name='getwchar' filepath='/usr/include/wchar.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <typedef-decl name='size_t' type-id='type-id-46' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='216' column='1' id='type-id-88'/>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/wchar.h' line='83' column='1' id='type-id-89'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='__count' type-id='type-id-38' visibility='default' filepath='/usr/include/wchar.h' line='84' column='1'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='__mbstate_t' type-id='type-id-89' filepath='/usr/include/wchar.h' line='94' column='1' id='type-id-90'/>
+ <typedef-decl name='mbstate_t' type-id='type-id-90' filepath='/usr/include/wchar.h' line='106' column='1' id='type-id-91'/>
+ <pointer-type-def type-id='type-id-91' size-in-bits='64' id='type-id-92'/>
+ <function-decl name='mbrlen' filepath='/usr/include/wchar.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-88'/>
+ <parameter type-id='type-id-92'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <function-decl name='mbrtowc' filepath='/usr/include/wchar.h' line='365' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-88'/>
+ <parameter type-id='type-id-92'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-91' const='yes' id='type-id-93'/>
+ <pointer-type-def type-id='type-id-93' size-in-bits='64' id='type-id-94'/>
+ <function-decl name='mbsinit' filepath='/usr/include/wchar.h' line='361' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-36' size-in-bits='64' id='type-id-95'/>
+ <function-decl name='mbsrtowcs' filepath='/usr/include/wchar.h' line='408' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-95'/>
+ <parameter type-id='type-id-88'/>
+ <parameter type-id='type-id-92'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <function-decl name='putwc' filepath='/usr/include/wchar.h' line='760' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-83'/>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <function-decl name='putwchar' filepath='/usr/include/wchar.h' line='766' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <function-decl name='swprintf' filepath='/usr/include/wchar.h' line='604' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-88'/>
+ <parameter type-id='type-id-87'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='swscanf' filepath='/usr/include/wchar.h' line='645' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='ungetwc' filepath='/usr/include/wchar.h' line='789' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-83'/>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <class-decl name='typedef __va_list_tag __va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='type-id-96'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='gp_offset' type-id='type-id-79' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='fp_offset' type-id='type-id-79' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='overflow_arg_area' type-id='type-id-64' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='reg_save_area' type-id='type-id-64' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-96' size-in-bits='64' id='type-id-97'/>
+ <function-decl name='vfwprintf' filepath='/usr/include/wchar.h' line='612' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-83'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='vfwscanf' filepath='/usr/include/wchar.h' line='689' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-83'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='vswprintf' filepath='/usr/include/wchar.h' line='625' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-88'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='vswscanf' filepath='/usr/include/wchar.h' line='701' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='vwprintf' filepath='/usr/include/wchar.h' line='620' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='vwscanf' filepath='/usr/include/wchar.h' line='697' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='wcrtomb' filepath='/usr/include/wchar.h' line='370' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-92'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <function-decl name='wcscat' filepath='/usr/include/wchar.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcscmp' filepath='/usr/include/wchar.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='wcscoll' filepath='/usr/include/wchar.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='wcscpy' filepath='/usr/include/wchar.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcscspn' filepath='/usr/include/wchar.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' filepath='/usr/include/time.h' line='133' column='1' id='type-id-98'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='tm_sec' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='135' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='tm_min' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='136' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tm_hour' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='137' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='96'>
+ <var-decl name='tm_mday' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='138' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='tm_mon' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='139' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='160'>
+ <var-decl name='tm_year' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='140' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='tm_wday' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='141' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='224'>
+ <var-decl name='tm_yday' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='142' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='tm_isdst' type-id='type-id-38' visibility='default' filepath='/usr/include/time.h' line='143' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='tm_gmtoff' type-id='type-id-99' visibility='default' filepath='/usr/include/time.h' line='146' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='tm_zone' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='147' column='1'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='long int' size-in-bits='64' id='type-id-99'/>
+ <qualified-type-def type-id='type-id-98' const='yes' id='type-id-100'/>
+ <pointer-type-def type-id='type-id-100' size-in-bits='64' id='type-id-101'/>
+ <function-decl name='wcsftime' filepath='/usr/include/wchar.h' line='855' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-88'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-101'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <function-decl name='wcslen' filepath='/usr/include/wchar.h' line='287' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <function-decl name='wcsncat' filepath='/usr/include/wchar.h' line='158' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsncmp' filepath='/usr/include/wchar.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='wcsncpy' filepath='/usr/include/wchar.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-87' size-in-bits='64' id='type-id-102'/>
+ <function-decl name='wcsrtombs' filepath='/usr/include/wchar.h' line='414' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-102'/>
+ <parameter type-id='type-id-88'/>
+ <parameter type-id='type-id-92'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <function-decl name='wcsspn' filepath='/usr/include/wchar.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <type-decl name='double' size-in-bits='64' id='type-id-103'/>
+ <pointer-type-def type-id='type-id-85' size-in-bits='64' id='type-id-104'/>
+ <function-decl name='wcstod' filepath='/usr/include/wchar.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-104'/>
+ <return type-id='type-id-103'/>
+ </function-decl>
+ <type-decl name='float' size-in-bits='32' id='type-id-105'/>
+ <function-decl name='wcstof' filepath='/usr/include/wchar.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-104'/>
+ <return type-id='type-id-105'/>
+ </function-decl>
+ <function-decl name='wcstok' filepath='/usr/include/wchar.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-104'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcstol' filepath='/usr/include/wchar.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-104'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-99'/>
+ </function-decl>
+ <function-decl name='wcstoul' filepath='/usr/include/wchar.h' line='473' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-104'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-46'/>
+ </function-decl>
+ <function-decl name='wcsxfrm' filepath='/usr/include/wchar.h' line='196' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+ <function-decl name='wctob' filepath='/usr/include/wchar.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='wmemcmp' filepath='/usr/include/wchar.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='wmemcpy' filepath='/usr/include/wchar.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wmemmove' filepath='/usr/include/wchar.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wmemset' filepath='/usr/include/wchar.h' line='338' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wprintf' filepath='/usr/include/wchar.h' line='601' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='wscanf' filepath='/usr/include/wchar.h' line='642' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <function-decl name='wcschr' mangled-name='wcschr' filepath='/usr/include/wchar.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-87'/>
+ </function-decl>
+ <function-decl name='wcspbrk' mangled-name='wcspbrk' filepath='/usr/include/wchar.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-87'/>
+ </function-decl>
+ <function-decl name='wcsrchr' mangled-name='wcsrchr' filepath='/usr/include/wchar.h' line='234' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-87'/>
+ </function-decl>
+ <function-decl name='wcsstr' mangled-name='wcsstr' filepath='/usr/include/wchar.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-87'/>
+ <return type-id='type-id-87'/>
+ </function-decl>
+ <function-decl name='wmemchr' mangled-name='wmemchr' filepath='/usr/include/wchar.h' line='316' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-88'/>
+ <return type-id='type-id-87'/>
+ </function-decl>
+ <type-decl name='long double' size-in-bits='128' id='type-id-106'/>
+ <function-decl name='wcstold' filepath='/usr/include/wchar.h' line='459' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-104'/>
+ <return type-id='type-id-106'/>
+ </function-decl>
+ <type-decl name='long long int' size-in-bits='64' id='type-id-107'/>
+ <function-decl name='wcstoll' filepath='/usr/include/wchar.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-104'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-107'/>
+ </function-decl>
+ <type-decl name='long long unsigned int' size-in-bits='64' id='type-id-108'/>
+ <function-decl name='wcstoull' filepath='/usr/include/wchar.h' line='490' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-87'/>
+ <parameter type-id='type-id-104'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-108'/>
+ </function-decl>
+
+ <function-decl name='setlocale' filepath='/usr/include/locale.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-38'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='53' column='1' id='type-id-109'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='57' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='64' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='int_curr_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='70' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='currency_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='71' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='mon_decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='72' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='mon_thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='73' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='mon_grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='74' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='512'>
+ <var-decl name='positive_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='75' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='576'>
+ <var-decl name='negative_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='76' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='640'>
+ <var-decl name='int_frac_digits' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='77' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='648'>
+ <var-decl name='frac_digits' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='78' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='656'>
+ <var-decl name='p_cs_precedes' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='80' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='664'>
+ <var-decl name='p_sep_by_space' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='82' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='672'>
+ <var-decl name='n_cs_precedes' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='84' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='680'>
+ <var-decl name='n_sep_by_space' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='86' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='688'>
+ <var-decl name='p_sign_posn' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='93' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='696'>
+ <var-decl name='n_sign_posn' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='94' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='704'>
+ <var-decl name='int_p_cs_precedes' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='97' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='712'>
+ <var-decl name='int_p_sep_by_space' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='99' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='720'>
+ <var-decl name='int_n_cs_precedes' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='101' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='728'>
+ <var-decl name='int_n_sep_by_space' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='103' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='736'>
+ <var-decl name='int_p_sign_posn' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='110' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='744'>
+ <var-decl name='int_n_sign_posn' type-id='type-id-37' visibility='default' filepath='/usr/include/locale.h' line='111' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-109' size-in-bits='64' id='type-id-110'/>
+ <function-decl name='localeconv' filepath='/usr/include/locale.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-110'/>
+ </function-decl>
+ <typedef-decl name='wctype_t' type-id='type-id-46' filepath='/usr/include/wctype.h' line='52' column='1' id='type-id-111'/>
+ <function-decl name='iswctype' filepath='/usr/include/wctype.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-111'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ <typedef-decl name='__int32_t' type-id='type-id-38' filepath='/usr/include/bits/types.h' line='40' column='1' id='type-id-112'/>
+ <qualified-type-def type-id='type-id-112' const='yes' id='type-id-113'/>
+ <pointer-type-def type-id='type-id-113' size-in-bits='64' id='type-id-114'/>
+ <typedef-decl name='wctrans_t' type-id='type-id-114' filepath='/usr/include/wctype.h' line='186' column='1' id='type-id-115'/>
+ <function-decl name='towctrans' filepath='/usr/include/wctype.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-115'/>
+ <return type-id='type-id-80'/>
+ </function-decl>
+ <function-decl name='wctrans' filepath='/usr/include/wctype.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-115'/>
+ </function-decl>
+ <function-decl name='wctype' filepath='/usr/include/wctype.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-111'/>
+ </function-decl>
+ <reference-type-def kind='lvalue' type-id='type-id-48' size-in-bits='64' id='type-id-50'/>
+ <qualified-type-def type-id='type-id-48' const='yes' id='type-id-116'/>
+ <reference-type-def kind='lvalue' type-id='type-id-116' size-in-bits='64' id='type-id-51'/>
+ <pointer-type-def type-id='type-id-116' size-in-bits='64' id='type-id-52'/>
+ <pointer-type-def type-id='type-id-48' size-in-bits='64' id='type-id-53'/>
+ <qualified-type-def type-id='type-id-49' const='yes' id='type-id-117'/>
+ <reference-type-def kind='lvalue' type-id='type-id-117' size-in-bits='64' id='type-id-54'/>
+ <qualified-type-def type-id='type-id-55' const='yes' id='type-id-118'/>
+ <reference-type-def kind='lvalue' type-id='type-id-118' size-in-bits='64' id='type-id-119'/>
+ <qualified-type-def type-id='type-id-119' id='type-id-120'/>
+ <function-decl name='foo' mangled-name='_Z3fooRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3fooRKSs'>
+ <parameter type-id='type-id-120' name='s' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1'/>
+ <return type-id='type-id-55'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-121'/>
+ <function-decl name='bar' mangled-name='_Z3barRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3barRKSs'>
+ <parameter type-id='type-id-120' name='str' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1'/>
+ <return type-id='type-id-121'/>
+ </function-decl>
+ <var-decl name='__dso_handle' type-id='type-id-64' visibility='default'/>
+ <qualified-type-def type-id='type-id-38' const='yes' id='type-id-66'/>
+ <qualified-type-def type-id='type-id-32' const='yes' id='type-id-67'/>
+ <qualified-type-def type-id='type-id-46' const='yes' id='type-id-69'/>
+ <type-decl name='short int' size-in-bits='16' id='type-id-122'/>
+ <qualified-type-def type-id='type-id-122' const='yes' id='type-id-72'/>
+ <qualified-type-def type-id='type-id-99' const='yes' id='type-id-74'/>
+ </abi-instr>
+</abi-corpus>
--- /dev/null
+<abi-corpus path='data/test-read-dwarf/libtest24-drop-fns.so'>
+ <elf-needed>
+ <dependency name='libgcc_s.so.1'/>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='_Z3barRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_Z3fooRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_ZNSt11char_traitsIcE6lengthEPKc' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_fini' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_init' type='func-type' binding='global-binding' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test24-drop-fns.cc' language='LANG_C_plus_plus'>
+ <namespace-decl name='std'>
+
+ <class-decl name='basic_ostream<char, std::char_traits<char> >' visibility='default' is-declaration-only='yes' id='type-id-1'/>
+ <typedef-decl name='ostream' type-id='type-id-1' filepath='/usr/include/c++/5.3.1/iosfwd' line='141' column='1' id='type-id-2'/>
+ <var-decl name='cout' type-id='type-id-2' mangled-name='_ZSt4cout' visibility='default' filepath='/usr/include/c++/5.3.1/iostream' line='61' column='1'/>
+ <class-decl name='char_traits<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='233' column='1' id='type-id-3'>
+ <member-type access='public'>
+ <typedef-decl name='char_type' type-id='type-id-5' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='235' column='1' id='type-id-4'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='int_type' type-id='type-id-7' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='236' column='1' id='type-id-6'/>
+ </member-type>
+ </class-decl>
+ <class-decl name='basic_string<char, std::char_traits<char>, std::allocator<char> >' size-in-bits='64' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2510' column='1' id='type-id-8'>
+ <member-type access='private'>
+ <class-decl name='_Alloc_hider' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2670' column='1' id='type-id-9'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-10'/>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_p' type-id='type-id-11' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2675' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-13' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2519' column='1' id='type-id-12'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='allocator_type' type-id='type-id-10' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2518' column='1' id='type-id-14'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-16' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2521' column='1' id='type-id-15'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-18' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2522' column='1' id='type-id-17'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='iterator' type-id='type-id-20' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2525' column='1' id='type-id-19'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_iterator' type-id='type-id-22' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2527' column='1' id='type-id-21'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reverse_iterator' type-id='type-id-24' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2528' column='1' id='type-id-23'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reverse_iterator' type-id='type-id-26' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2529' column='1' id='type-id-25'/>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2546' column='1' id='type-id-27'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_length' type-id='type-id-12' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2548' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='_M_capacity' type-id='type-id-12' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2549' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='_M_refcount' type-id='type-id-28' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2550' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2553' column='1' id='type-id-29'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-27'/>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_max_size' type-id='type-id-30' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='494' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_terminal' type-id='type-id-31' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='499' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <data-member access='public' static='yes'>
+ <var-decl name='npos' type-id='type-id-30' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2683' column='1'/>
+ </data-member>
+ <data-member access='private' layout-offset-in-bits='0'>
+ <var-decl name='_M_dataplus' type-id='type-id-9' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2687' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-10'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-32'/>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-33' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='95' column='1' id='type-id-13'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-34' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='99' column='1' id='type-id-16'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-35' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='100' column='1' id='type-id-18'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='size_t' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/c++config.h' line='1969' column='1' id='type-id-33'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-24'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-26'/>
+ <typedef-decl name='string' type-id='type-id-8' filepath='/usr/include/c++/5.3.1/bits/stringfwd.h' line='74' column='1' id='type-id-37'/>
+ </namespace-decl>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-38'/>
+ <typedef-decl name='wint_t' type-id='type-id-38' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='357' column='1' id='type-id-39'/>
+ <type-decl name='int' size-in-bits='32' id='type-id-7'/>
+ <function-decl name='btowc' filepath='/usr/include/wchar.h' line='353' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-7'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-40'/>
+ <typedef-decl name='__FILE' type-id='type-id-40' filepath='/usr/include/stdio.h' line='64' column='1' id='type-id-41'/>
+ <pointer-type-def type-id='type-id-41' size-in-bits='64' id='type-id-42'/>
+ <function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <type-decl name='wchar_t' size-in-bits='32' id='type-id-43'/>
+ <pointer-type-def type-id='type-id-43' size-in-bits='64' id='type-id-44'/>
+ <function-decl name='fgetws' filepath='/usr/include/wchar.h' line='774' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-7'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <function-decl name='fputwc' filepath='/usr/include/wchar.h' line='759' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-43'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-43' const='yes' id='type-id-45'/>
+ <pointer-type-def type-id='type-id-45' size-in-bits='64' id='type-id-46'/>
+ <function-decl name='fputws' filepath='/usr/include/wchar.h' line='781' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='fwide' filepath='/usr/include/wchar.h' line='587' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42'/>
+ <parameter type-id='type-id-7'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='fwprintf' filepath='/usr/include/wchar.h' line='594' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42'/>
+ <parameter type-id='type-id-46'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='fwscanf' filepath='/usr/include/wchar.h' line='635' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42'/>
+ <parameter type-id='type-id-46'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='getwc' filepath='/usr/include/wchar.h' line='746' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <function-decl name='getwchar' filepath='/usr/include/wchar.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-36'/>
+ <typedef-decl name='size_t' type-id='type-id-36' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='216' column='1' id='type-id-47'/>
+ <type-decl name='char' size-in-bits='8' id='type-id-5'/>
+ <qualified-type-def type-id='type-id-5' const='yes' id='type-id-31'/>
+ <pointer-type-def type-id='type-id-31' size-in-bits='64' id='type-id-48'/>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/wchar.h' line='83' column='1' id='type-id-49'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='__count' type-id='type-id-7' visibility='default' filepath='/usr/include/wchar.h' line='84' column='1'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='__mbstate_t' type-id='type-id-49' filepath='/usr/include/wchar.h' line='94' column='1' id='type-id-50'/>
+ <typedef-decl name='mbstate_t' type-id='type-id-50' filepath='/usr/include/wchar.h' line='106' column='1' id='type-id-51'/>
+ <pointer-type-def type-id='type-id-51' size-in-bits='64' id='type-id-52'/>
+ <function-decl name='mbrlen' filepath='/usr/include/wchar.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-48'/>
+ <parameter type-id='type-id-47'/>
+ <parameter type-id='type-id-52'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <function-decl name='mbrtowc' filepath='/usr/include/wchar.h' line='365' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-48'/>
+ <parameter type-id='type-id-47'/>
+ <parameter type-id='type-id-52'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-51' const='yes' id='type-id-53'/>
+ <pointer-type-def type-id='type-id-53' size-in-bits='64' id='type-id-54'/>
+ <function-decl name='mbsinit' filepath='/usr/include/wchar.h' line='361' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-54'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-48' size-in-bits='64' id='type-id-55'/>
+ <function-decl name='mbsrtowcs' filepath='/usr/include/wchar.h' line='408' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-55'/>
+ <parameter type-id='type-id-47'/>
+ <parameter type-id='type-id-52'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <function-decl name='putwc' filepath='/usr/include/wchar.h' line='760' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-43'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <function-decl name='putwchar' filepath='/usr/include/wchar.h' line='766' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-43'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <function-decl name='swprintf' filepath='/usr/include/wchar.h' line='604' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-47'/>
+ <parameter type-id='type-id-46'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='swscanf' filepath='/usr/include/wchar.h' line='645' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='ungetwc' filepath='/usr/include/wchar.h' line='789' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <class-decl name='typedef __va_list_tag __va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='type-id-56'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='gp_offset' type-id='type-id-38' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='fp_offset' type-id='type-id-38' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='overflow_arg_area' type-id='type-id-57' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='reg_save_area' type-id='type-id-57' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='void' id='type-id-58'/>
+ <pointer-type-def type-id='type-id-58' size-in-bits='64' id='type-id-57'/>
+ <pointer-type-def type-id='type-id-56' size-in-bits='64' id='type-id-59'/>
+ <function-decl name='vfwprintf' filepath='/usr/include/wchar.h' line='612' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-59'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='vfwscanf' filepath='/usr/include/wchar.h' line='689' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-59'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='vswprintf' filepath='/usr/include/wchar.h' line='625' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-47'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-59'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='vswscanf' filepath='/usr/include/wchar.h' line='701' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-59'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='vwprintf' filepath='/usr/include/wchar.h' line='620' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-59'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='vwscanf' filepath='/usr/include/wchar.h' line='697' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-59'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-11'/>
+ <function-decl name='wcrtomb' filepath='/usr/include/wchar.h' line='370' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-11'/>
+ <parameter type-id='type-id-43'/>
+ <parameter type-id='type-id-52'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <function-decl name='wcscat' filepath='/usr/include/wchar.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <function-decl name='wcscmp' filepath='/usr/include/wchar.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='wcscoll' filepath='/usr/include/wchar.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='wcscpy' filepath='/usr/include/wchar.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <function-decl name='wcscspn' filepath='/usr/include/wchar.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' filepath='/usr/include/time.h' line='133' column='1' id='type-id-60'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='tm_sec' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='135' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='tm_min' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='136' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tm_hour' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='137' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='96'>
+ <var-decl name='tm_mday' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='138' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='tm_mon' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='139' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='160'>
+ <var-decl name='tm_year' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='140' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='tm_wday' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='141' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='224'>
+ <var-decl name='tm_yday' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='142' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='tm_isdst' type-id='type-id-7' visibility='default' filepath='/usr/include/time.h' line='143' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='tm_gmtoff' type-id='type-id-61' visibility='default' filepath='/usr/include/time.h' line='146' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='tm_zone' type-id='type-id-48' visibility='default' filepath='/usr/include/time.h' line='147' column='1'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='long int' size-in-bits='64' id='type-id-61'/>
+ <qualified-type-def type-id='type-id-60' const='yes' id='type-id-62'/>
+ <pointer-type-def type-id='type-id-62' size-in-bits='64' id='type-id-63'/>
+ <function-decl name='wcsftime' filepath='/usr/include/wchar.h' line='855' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-47'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-63'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <function-decl name='wcslen' filepath='/usr/include/wchar.h' line='287' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <function-decl name='wcsncat' filepath='/usr/include/wchar.h' line='158' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <function-decl name='wcsncmp' filepath='/usr/include/wchar.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='wcsncpy' filepath='/usr/include/wchar.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-46' size-in-bits='64' id='type-id-64'/>
+ <function-decl name='wcsrtombs' filepath='/usr/include/wchar.h' line='414' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-11'/>
+ <parameter type-id='type-id-64'/>
+ <parameter type-id='type-id-47'/>
+ <parameter type-id='type-id-52'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <function-decl name='wcsspn' filepath='/usr/include/wchar.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <type-decl name='double' size-in-bits='64' id='type-id-65'/>
+ <pointer-type-def type-id='type-id-44' size-in-bits='64' id='type-id-66'/>
+ <function-decl name='wcstod' filepath='/usr/include/wchar.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-66'/>
+ <return type-id='type-id-65'/>
+ </function-decl>
+ <type-decl name='float' size-in-bits='32' id='type-id-67'/>
+ <function-decl name='wcstof' filepath='/usr/include/wchar.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-66'/>
+ <return type-id='type-id-67'/>
+ </function-decl>
+ <function-decl name='wcstok' filepath='/usr/include/wchar.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-66'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <function-decl name='wcstol' filepath='/usr/include/wchar.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-66'/>
+ <parameter type-id='type-id-7'/>
+ <return type-id='type-id-61'/>
+ </function-decl>
+ <function-decl name='wcstoul' filepath='/usr/include/wchar.h' line='473' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-66'/>
+ <parameter type-id='type-id-7'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcsxfrm' filepath='/usr/include/wchar.h' line='196' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-47'/>
+ </function-decl>
+ <function-decl name='wctob' filepath='/usr/include/wchar.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='wmemcmp' filepath='/usr/include/wchar.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='wmemcpy' filepath='/usr/include/wchar.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <function-decl name='wmemmove' filepath='/usr/include/wchar.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <function-decl name='wmemset' filepath='/usr/include/wchar.h' line='338' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44'/>
+ <parameter type-id='type-id-43'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-44'/>
+ </function-decl>
+ <function-decl name='wprintf' filepath='/usr/include/wchar.h' line='601' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='wscanf' filepath='/usr/include/wchar.h' line='642' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <function-decl name='wcschr' mangled-name='wcschr' filepath='/usr/include/wchar.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-43'/>
+ <return type-id='type-id-46'/>
+ </function-decl>
+ <function-decl name='wcspbrk' mangled-name='wcspbrk' filepath='/usr/include/wchar.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-46'/>
+ </function-decl>
+ <function-decl name='wcsrchr' mangled-name='wcsrchr' filepath='/usr/include/wchar.h' line='234' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-43'/>
+ <return type-id='type-id-46'/>
+ </function-decl>
+ <function-decl name='wcsstr' mangled-name='wcsstr' filepath='/usr/include/wchar.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-46'/>
+ </function-decl>
+ <function-decl name='wmemchr' mangled-name='wmemchr' filepath='/usr/include/wchar.h' line='316' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-43'/>
+ <parameter type-id='type-id-47'/>
+ <return type-id='type-id-46'/>
+ </function-decl>
+ <namespace-decl name='__gnu_cxx'>
+
+ <class-decl name='new_allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='58' column='1' id='type-id-32'>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-33' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='61' column='1' id='type-id-68'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='pointer' type-id='type-id-11' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='63' column='1' id='type-id-69'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_pointer' type-id='type-id-48' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='64' column='1' id='type-id-70'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-34' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='65' column='1' id='type-id-71'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-35' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='66' column='1' id='type-id-72'/>
+ </member-type>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-73' is-artificial='yes'/>
+ <return type-id='type-id-58'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4ERKS1_' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-73' is-artificial='yes'/>
+ <parameter type-id='type-id-74'/>
+ <return type-id='type-id-58'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcED4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-73' is-artificial='yes'/>
+ <parameter type-id='type-id-7' is-artificial='yes'/>
+ <return type-id='type-id-58'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-75' is-artificial='yes'/>
+ <parameter type-id='type-id-71'/>
+ <return type-id='type-id-69'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-75' is-artificial='yes'/>
+ <parameter type-id='type-id-72'/>
+ <return type-id='type-id-70'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='allocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-73' is-artificial='yes'/>
+ <parameter type-id='type-id-68'/>
+ <parameter type-id='type-id-57'/>
+ <return type-id='type-id-69'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='deallocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-73' is-artificial='yes'/>
+ <parameter type-id='type-id-69'/>
+ <parameter type-id='type-id-68'/>
+ <return type-id='type-id-58'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='max_size' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-75' is-artificial='yes'/>
+ <return type-id='type-id-68'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='construct' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-73' is-artificial='yes'/>
+ <parameter type-id='type-id-69'/>
+ <parameter type-id='type-id-35'/>
+ <return type-id='type-id-58'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='destroy' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE7destroyEPc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-73' is-artificial='yes'/>
+ <parameter type-id='type-id-69'/>
+ <return type-id='type-id-58'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <class-decl name='__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-20'/>
+ <class-decl name='__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-22'/>
+ <class-decl name='__numeric_traits_integer<int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-76'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-77' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-77' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-78' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-77' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long unsigned int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-79'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-80' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-80' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-78' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-77' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-81'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-31' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-31' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-78' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-77' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<short int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-82'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-83' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-83' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-78' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-77' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-84'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-85' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-85' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-78' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-77' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ </namespace-decl>
+ <type-decl name='long double' size-in-bits='128' id='type-id-86'/>
+ <function-decl name='wcstold' filepath='/usr/include/wchar.h' line='459' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-66'/>
+ <return type-id='type-id-86'/>
+ </function-decl>
+ <type-decl name='long long int' size-in-bits='64' id='type-id-87'/>
+ <function-decl name='wcstoll' filepath='/usr/include/wchar.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-66'/>
+ <parameter type-id='type-id-7'/>
+ <return type-id='type-id-87'/>
+ </function-decl>
+ <type-decl name='long long unsigned int' size-in-bits='64' id='type-id-88'/>
+ <function-decl name='wcstoull' filepath='/usr/include/wchar.h' line='490' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-46'/>
+ <parameter type-id='type-id-66'/>
+ <parameter type-id='type-id-7'/>
+ <return type-id='type-id-88'/>
+ </function-decl>
+
+ <function-decl name='setlocale' filepath='/usr/include/locale.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-7'/>
+ <parameter type-id='type-id-48'/>
+ <return type-id='type-id-11'/>
+ </function-decl>
+ <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='53' column='1' id='type-id-89'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='decimal_point' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='57' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='thousands_sep' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='grouping' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='64' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='int_curr_symbol' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='70' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='currency_symbol' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='71' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='mon_decimal_point' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='72' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='mon_thousands_sep' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='73' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='mon_grouping' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='74' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='512'>
+ <var-decl name='positive_sign' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='75' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='576'>
+ <var-decl name='negative_sign' type-id='type-id-11' visibility='default' filepath='/usr/include/locale.h' line='76' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='640'>
+ <var-decl name='int_frac_digits' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='77' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='648'>
+ <var-decl name='frac_digits' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='78' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='656'>
+ <var-decl name='p_cs_precedes' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='80' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='664'>
+ <var-decl name='p_sep_by_space' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='82' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='672'>
+ <var-decl name='n_cs_precedes' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='84' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='680'>
+ <var-decl name='n_sep_by_space' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='86' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='688'>
+ <var-decl name='p_sign_posn' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='93' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='696'>
+ <var-decl name='n_sign_posn' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='94' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='704'>
+ <var-decl name='int_p_cs_precedes' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='97' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='712'>
+ <var-decl name='int_p_sep_by_space' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='99' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='720'>
+ <var-decl name='int_n_cs_precedes' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='101' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='728'>
+ <var-decl name='int_n_sep_by_space' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='103' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='736'>
+ <var-decl name='int_p_sign_posn' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='110' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='744'>
+ <var-decl name='int_n_sign_posn' type-id='type-id-5' visibility='default' filepath='/usr/include/locale.h' line='111' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-89' size-in-bits='64' id='type-id-90'/>
+ <function-decl name='localeconv' filepath='/usr/include/locale.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-90'/>
+ </function-decl>
+ <typedef-decl name='wctype_t' type-id='type-id-36' filepath='/usr/include/wctype.h' line='52' column='1' id='type-id-91'/>
+ <function-decl name='iswctype' filepath='/usr/include/wctype.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-91'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <typedef-decl name='__int32_t' type-id='type-id-7' filepath='/usr/include/bits/types.h' line='40' column='1' id='type-id-92'/>
+ <qualified-type-def type-id='type-id-92' const='yes' id='type-id-93'/>
+ <pointer-type-def type-id='type-id-93' size-in-bits='64' id='type-id-94'/>
+ <typedef-decl name='wctrans_t' type-id='type-id-94' filepath='/usr/include/wctype.h' line='186' column='1' id='type-id-95'/>
+ <function-decl name='towctrans' filepath='/usr/include/wctype.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-95'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ <function-decl name='wctrans' filepath='/usr/include/wctype.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-48'/>
+ <return type-id='type-id-95'/>
+ </function-decl>
+ <function-decl name='wctype' filepath='/usr/include/wctype.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-48'/>
+ <return type-id='type-id-91'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-4' const='yes' id='type-id-96'/>
+ <qualified-type-def type-id='type-id-6' const='yes' id='type-id-97'/>
+ <reference-type-def kind='lvalue' type-id='type-id-5' size-in-bits='64' id='type-id-34'/>
+ <reference-type-def kind='lvalue' type-id='type-id-31' size-in-bits='64' id='type-id-35'/>
+ <pointer-type-def type-id='type-id-32' size-in-bits='64' id='type-id-73'/>
+ <qualified-type-def type-id='type-id-32' const='yes' id='type-id-98'/>
+ <reference-type-def kind='lvalue' type-id='type-id-98' size-in-bits='64' id='type-id-74'/>
+ <pointer-type-def type-id='type-id-98' size-in-bits='64' id='type-id-75'/>
+ <qualified-type-def type-id='type-id-12' const='yes' id='type-id-30'/>
+ <typedef-decl name='_Atomic_word' type-id='type-id-7' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/atomic_word.h' line='32' column='1' id='type-id-28'/>
+ <qualified-type-def type-id='type-id-29' const='yes' id='type-id-99'/>
+ <qualified-type-def type-id='type-id-37' const='yes' id='type-id-100'/>
+ <reference-type-def kind='lvalue' type-id='type-id-100' size-in-bits='64' id='type-id-101'/>
+ <qualified-type-def type-id='type-id-101' id='type-id-102'/>
+ <function-decl name='foo' mangled-name='_Z3fooRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3fooRKSs'>
+ <parameter type-id='type-id-102' name='s' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1'/>
+ <return type-id='type-id-37'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-103'/>
+ <function-decl name='bar' mangled-name='_Z3barRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3barRKSs'>
+ <parameter type-id='type-id-102' name='str' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1'/>
+ <return type-id='type-id-103'/>
+ </function-decl>
+ <var-decl name='__dso_handle' type-id='type-id-57' visibility='default'/>
+ <qualified-type-def type-id='type-id-7' const='yes' id='type-id-77'/>
+ <type-decl name='bool' size-in-bits='8' id='type-id-104'/>
+ <qualified-type-def type-id='type-id-104' const='yes' id='type-id-78'/>
+ <qualified-type-def type-id='type-id-36' const='yes' id='type-id-80'/>
+ <type-decl name='short int' size-in-bits='16' id='type-id-105'/>
+ <qualified-type-def type-id='type-id-105' const='yes' id='type-id-83'/>
+ <qualified-type-def type-id='type-id-61' const='yes' id='type-id-85'/>
+ </abi-instr>
+</abi-corpus>
--- /dev/null
+[suppress_function]
+ #
+ # Remove functions from the C++ standard library if we are not
+ # looking at the standard library itself.
+ #
+ file_name_not_regexp = libstdc++.*
+ name_regexp = std::.*
+ drop = yes
--- /dev/null
+// Compile this with:
+// gcc -g -Wall -fPIC -shared -o libtest24-drop-fns.so test24-drop-fns.cc
+
+#include <iostream>
+#include <sstream>
+#include <string>
+
+using std::string;
+using std::cout;
+using std::ostringstream;
+using std::ostream;
+
+string
+foo(const string& s)
+{
+ string str = "The input string was: '" + s;
+ return str;
+}
+
+ostream*
+bar(const string& str)
+{
+ ostringstream *o = new ostringstream;
+ *o << str << foo(str);
+ return o;
+}
--- /dev/null
+[suppress_function]
+ name_regexp = std::.*
+ drop = true
--- /dev/null
+[suppress_variable]
+ name_regexp = std::.*
+ drop = true
+
+[suppress_variable]
+ name_regexp = __gnu_cxx::.*
+ drop = true
--- /dev/null
+<abi-corpus path='tests/data/test-read-dwarf/libtest24-drop-fns.so'>
+ <elf-needed>
+ <dependency name='libgcc_s.so.1'/>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='_Z3barRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_Z3fooRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_ZNSt11char_traitsIcE6lengthEPKc' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_fini' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_init' type='func-type' binding='global-binding' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test24-drop-fns.cc' language='LANG_C_plus_plus'>
+ <namespace-decl name='std'>
+
+ <class-decl name='basic_ostream<char, std::char_traits<char> >' visibility='default' is-declaration-only='yes' id='type-id-1'/>
+ <typedef-decl name='ostream' type-id='type-id-1' filepath='/usr/include/c++/5.3.1/iosfwd' line='141' column='1' id='type-id-2'/>
+ <var-decl name='cout' type-id='type-id-2' mangled-name='_ZSt4cout' visibility='default' filepath='/usr/include/c++/5.3.1/iostream' line='61' column='1'/>
+ <class-decl name='basic_string<char, std::char_traits<char>, std::allocator<char> >' size-in-bits='64' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2510' column='1' id='type-id-3'>
+ <member-type access='private'>
+ <class-decl name='_Alloc_hider' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2670' column='1' id='type-id-4'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-5'/>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_p' type-id='type-id-6' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2675' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-8' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2519' column='1' id='type-id-7'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='allocator_type' type-id='type-id-5' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2518' column='1' id='type-id-9'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-11' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2521' column='1' id='type-id-10'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-13' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2522' column='1' id='type-id-12'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='iterator' type-id='type-id-15' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2525' column='1' id='type-id-14'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_iterator' type-id='type-id-17' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2527' column='1' id='type-id-16'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reverse_iterator' type-id='type-id-19' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2528' column='1' id='type-id-18'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reverse_iterator' type-id='type-id-21' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2529' column='1' id='type-id-20'/>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2546' column='1' id='type-id-22'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_length' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2548' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='_M_capacity' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2549' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='_M_refcount' type-id='type-id-23' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2550' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2553' column='1' id='type-id-24'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-22'/>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_max_size' type-id='type-id-25' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='494' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_terminal' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='499' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <data-member access='public' static='yes'>
+ <var-decl name='npos' type-id='type-id-25' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2683' column='1'/>
+ </data-member>
+ <data-member access='private' layout-offset-in-bits='0'>
+ <var-decl name='_M_dataplus' type-id='type-id-4' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2687' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-5'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-27'/>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='95' column='1' id='type-id-8'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='99' column='1' id='type-id-11'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-30' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='100' column='1' id='type-id-13'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='size_t' type-id='type-id-31' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/c++config.h' line='1969' column='1' id='type-id-28'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-19'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-21'/>
+ <class-decl name='char_traits<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='233' column='1' id='type-id-32'>
+ <member-type access='public'>
+ <typedef-decl name='char_type' type-id='type-id-34' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='235' column='1' id='type-id-33'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='int_type' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='236' column='1' id='type-id-35'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='string' type-id='type-id-3' filepath='/usr/include/c++/5.3.1/bits/stringfwd.h' line='74' column='1' id='type-id-37'/>
+ </namespace-decl>
+ <namespace-decl name='__gnu_cxx'>
+
+ <class-decl name='new_allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='58' column='1' id='type-id-27'>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='61' column='1' id='type-id-38'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='pointer' type-id='type-id-6' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='63' column='1' id='type-id-39'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_pointer' type-id='type-id-41' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='64' column='1' id='type-id-40'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='65' column='1' id='type-id-42'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-30' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='66' column='1' id='type-id-43'/>
+ </member-type>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4ERKS1_' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcED4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-36' is-artificial='yes'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <parameter type-id='type-id-43'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='allocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-38'/>
+ <parameter type-id='type-id-48'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='deallocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='max_size' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='construct' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-30'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='destroy' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE7destroyEPc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <class-decl name='__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-15'/>
+ <class-decl name='__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-17'/>
+ <class-decl name='__numeric_traits_integer<int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-49'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long unsigned int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-52'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-53' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-53' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-54'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-26' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<short int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-55'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-56' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-56' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-57'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-58' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-58' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ </namespace-decl>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-31'/>
+ <type-decl name='char' size-in-bits='8' id='type-id-34'/>
+ <pointer-type-def type-id='type-id-34' size-in-bits='64' id='type-id-6'/>
+ <qualified-type-def type-id='type-id-34' const='yes' id='type-id-26'/>
+ <pointer-type-def type-id='type-id-26' size-in-bits='64' id='type-id-41'/>
+ <reference-type-def kind='lvalue' type-id='type-id-34' size-in-bits='64' id='type-id-29'/>
+ <reference-type-def kind='lvalue' type-id='type-id-26' size-in-bits='64' id='type-id-30'/>
+ <pointer-type-def type-id='type-id-27' size-in-bits='64' id='type-id-44'/>
+ <type-decl name='void' id='type-id-45'/>
+ <qualified-type-def type-id='type-id-27' const='yes' id='type-id-59'/>
+ <reference-type-def kind='lvalue' type-id='type-id-59' size-in-bits='64' id='type-id-46'/>
+ <type-decl name='int' size-in-bits='32' id='type-id-36'/>
+ <pointer-type-def type-id='type-id-59' size-in-bits='64' id='type-id-47'/>
+ <pointer-type-def type-id='type-id-45' size-in-bits='64' id='type-id-48'/>
+ <qualified-type-def type-id='type-id-36' const='yes' id='type-id-50'/>
+ <type-decl name='bool' size-in-bits='8' id='type-id-60'/>
+ <qualified-type-def type-id='type-id-60' const='yes' id='type-id-51'/>
+ <qualified-type-def type-id='type-id-31' const='yes' id='type-id-53'/>
+ <type-decl name='short int' size-in-bits='16' id='type-id-61'/>
+ <qualified-type-def type-id='type-id-61' const='yes' id='type-id-56'/>
+ <type-decl name='long int' size-in-bits='64' id='type-id-62'/>
+ <qualified-type-def type-id='type-id-62' const='yes' id='type-id-58'/>
+ <typedef-decl name='_Atomic_word' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/atomic_word.h' line='32' column='1' id='type-id-23'/>
+ <qualified-type-def type-id='type-id-7' const='yes' id='type-id-25'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-63'/>
+ <qualified-type-def type-id='type-id-5' const='yes' id='type-id-64'/>
+ <reference-type-def kind='lvalue' type-id='type-id-64' size-in-bits='64' id='type-id-65'/>
+ <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-66'/>
+ <reference-type-def kind='lvalue' type-id='type-id-24' size-in-bits='64' id='type-id-67'/>
+ <qualified-type-def type-id='type-id-24' const='yes' id='type-id-68'/>
+ <pointer-type-def type-id='type-id-68' size-in-bits='64' id='type-id-69'/>
+ <pointer-type-def type-id='type-id-24' size-in-bits='64' id='type-id-70'/>
+ <qualified-type-def type-id='type-id-3' const='yes' id='type-id-71'/>
+ <pointer-type-def type-id='type-id-71' size-in-bits='64' id='type-id-72'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-73'/>
+ <reference-type-def kind='lvalue' type-id='type-id-71' size-in-bits='64' id='type-id-74'/>
+ <reference-type-def kind='lvalue' type-id='type-id-3' size-in-bits='64' id='type-id-75'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-76'/>
+ <typedef-decl name='wint_t' type-id='type-id-76' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='357' column='1' id='type-id-77'/>
+ <function-decl name='btowc' filepath='/usr/include/wchar.h' line='353' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-78'/>
+ <typedef-decl name='__FILE' type-id='type-id-78' filepath='/usr/include/stdio.h' line='64' column='1' id='type-id-79'/>
+ <pointer-type-def type-id='type-id-79' size-in-bits='64' id='type-id-80'/>
+ <function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <type-decl name='wchar_t' size-in-bits='32' id='type-id-81'/>
+ <pointer-type-def type-id='type-id-81' size-in-bits='64' id='type-id-82'/>
+ <function-decl name='fgetws' filepath='/usr/include/wchar.h' line='774' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='fputwc' filepath='/usr/include/wchar.h' line='759' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-81' const='yes' id='type-id-83'/>
+ <pointer-type-def type-id='type-id-83' size-in-bits='64' id='type-id-84'/>
+ <function-decl name='fputws' filepath='/usr/include/wchar.h' line='781' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwide' filepath='/usr/include/wchar.h' line='587' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwprintf' filepath='/usr/include/wchar.h' line='594' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwscanf' filepath='/usr/include/wchar.h' line='635' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='getwc' filepath='/usr/include/wchar.h' line='746' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='getwchar' filepath='/usr/include/wchar.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <typedef-decl name='size_t' type-id='type-id-31' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='216' column='1' id='type-id-85'/>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/wchar.h' line='83' column='1' id='type-id-86'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='__count' type-id='type-id-36' visibility='default' filepath='/usr/include/wchar.h' line='84' column='1'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='__mbstate_t' type-id='type-id-86' filepath='/usr/include/wchar.h' line='94' column='1' id='type-id-87'/>
+ <typedef-decl name='mbstate_t' type-id='type-id-87' filepath='/usr/include/wchar.h' line='106' column='1' id='type-id-88'/>
+ <pointer-type-def type-id='type-id-88' size-in-bits='64' id='type-id-89'/>
+ <function-decl name='mbrlen' filepath='/usr/include/wchar.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='mbrtowc' filepath='/usr/include/wchar.h' line='365' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-41'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-88' const='yes' id='type-id-90'/>
+ <pointer-type-def type-id='type-id-90' size-in-bits='64' id='type-id-91'/>
+ <function-decl name='mbsinit' filepath='/usr/include/wchar.h' line='361' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-91'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-41' size-in-bits='64' id='type-id-92'/>
+ <function-decl name='mbsrtowcs' filepath='/usr/include/wchar.h' line='408' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-92'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='putwc' filepath='/usr/include/wchar.h' line='760' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='putwchar' filepath='/usr/include/wchar.h' line='766' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='swprintf' filepath='/usr/include/wchar.h' line='604' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='swscanf' filepath='/usr/include/wchar.h' line='645' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='ungetwc' filepath='/usr/include/wchar.h' line='789' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='typedef __va_list_tag __va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='type-id-93'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='gp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='fp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='overflow_arg_area' type-id='type-id-48' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='reg_save_area' type-id='type-id-48' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-93' size-in-bits='64' id='type-id-94'/>
+ <function-decl name='vfwprintf' filepath='/usr/include/wchar.h' line='612' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vfwscanf' filepath='/usr/include/wchar.h' line='689' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vswprintf' filepath='/usr/include/wchar.h' line='625' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vswscanf' filepath='/usr/include/wchar.h' line='701' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vwprintf' filepath='/usr/include/wchar.h' line='620' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vwscanf' filepath='/usr/include/wchar.h' line='697' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcrtomb' filepath='/usr/include/wchar.h' line='370' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcscat' filepath='/usr/include/wchar.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscmp' filepath='/usr/include/wchar.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcscoll' filepath='/usr/include/wchar.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcscpy' filepath='/usr/include/wchar.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscspn' filepath='/usr/include/wchar.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' filepath='/usr/include/time.h' line='133' column='1' id='type-id-95'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='tm_sec' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='135' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='tm_min' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='136' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tm_hour' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='137' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='96'>
+ <var-decl name='tm_mday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='138' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='tm_mon' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='139' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='160'>
+ <var-decl name='tm_year' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='140' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='tm_wday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='141' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='224'>
+ <var-decl name='tm_yday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='142' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='tm_isdst' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='143' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='tm_gmtoff' type-id='type-id-62' visibility='default' filepath='/usr/include/time.h' line='146' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='tm_zone' type-id='type-id-41' visibility='default' filepath='/usr/include/time.h' line='147' column='1'/>
+ </data-member>
+ </class-decl>
+ <qualified-type-def type-id='type-id-95' const='yes' id='type-id-96'/>
+ <pointer-type-def type-id='type-id-96' size-in-bits='64' id='type-id-97'/>
+ <function-decl name='wcsftime' filepath='/usr/include/wchar.h' line='855' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcslen' filepath='/usr/include/wchar.h' line='287' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsncat' filepath='/usr/include/wchar.h' line='158' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcsncmp' filepath='/usr/include/wchar.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcsncpy' filepath='/usr/include/wchar.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-84' size-in-bits='64' id='type-id-98'/>
+ <function-decl name='wcsrtombs' filepath='/usr/include/wchar.h' line='414' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-98'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsspn' filepath='/usr/include/wchar.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <type-decl name='double' size-in-bits='64' id='type-id-99'/>
+ <pointer-type-def type-id='type-id-82' size-in-bits='64' id='type-id-100'/>
+ <function-decl name='wcstod' filepath='/usr/include/wchar.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-99'/>
+ </function-decl>
+ <type-decl name='float' size-in-bits='32' id='type-id-101'/>
+ <function-decl name='wcstof' filepath='/usr/include/wchar.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-101'/>
+ </function-decl>
+ <function-decl name='wcstok' filepath='/usr/include/wchar.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcstol' filepath='/usr/include/wchar.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-62'/>
+ </function-decl>
+ <function-decl name='wcstoul' filepath='/usr/include/wchar.h' line='473' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-31'/>
+ </function-decl>
+ <function-decl name='wcsxfrm' filepath='/usr/include/wchar.h' line='196' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wctob' filepath='/usr/include/wchar.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wmemcmp' filepath='/usr/include/wchar.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wmemcpy' filepath='/usr/include/wchar.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemmove' filepath='/usr/include/wchar.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemset' filepath='/usr/include/wchar.h' line='338' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wprintf' filepath='/usr/include/wchar.h' line='601' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wscanf' filepath='/usr/include/wchar.h' line='642' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcschr' mangled-name='wcschr' filepath='/usr/include/wchar.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcspbrk' mangled-name='wcspbrk' filepath='/usr/include/wchar.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsrchr' mangled-name='wcsrchr' filepath='/usr/include/wchar.h' line='234' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsstr' mangled-name='wcsstr' filepath='/usr/include/wchar.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wmemchr' mangled-name='wmemchr' filepath='/usr/include/wchar.h' line='316' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <type-decl name='long double' size-in-bits='128' id='type-id-102'/>
+ <function-decl name='wcstold' filepath='/usr/include/wchar.h' line='459' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-102'/>
+ </function-decl>
+ <type-decl name='long long int' size-in-bits='64' id='type-id-103'/>
+ <function-decl name='wcstoll' filepath='/usr/include/wchar.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-103'/>
+ </function-decl>
+ <type-decl name='long long unsigned int' size-in-bits='64' id='type-id-104'/>
+ <function-decl name='wcstoull' filepath='/usr/include/wchar.h' line='490' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-104'/>
+ </function-decl>
+
+ <function-decl name='setlocale' filepath='/usr/include/locale.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='53' column='1' id='type-id-105'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='57' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='64' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='int_curr_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='70' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='currency_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='71' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='mon_decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='72' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='mon_thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='73' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='mon_grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='74' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='512'>
+ <var-decl name='positive_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='75' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='576'>
+ <var-decl name='negative_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='76' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='640'>
+ <var-decl name='int_frac_digits' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='77' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='648'>
+ <var-decl name='frac_digits' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='78' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='656'>
+ <var-decl name='p_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='80' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='664'>
+ <var-decl name='p_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='82' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='672'>
+ <var-decl name='n_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='84' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='680'>
+ <var-decl name='n_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='86' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='688'>
+ <var-decl name='p_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='93' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='696'>
+ <var-decl name='n_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='94' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='704'>
+ <var-decl name='int_p_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='97' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='712'>
+ <var-decl name='int_p_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='99' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='720'>
+ <var-decl name='int_n_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='101' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='728'>
+ <var-decl name='int_n_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='103' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='736'>
+ <var-decl name='int_p_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='110' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='744'>
+ <var-decl name='int_n_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='111' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-105' size-in-bits='64' id='type-id-106'/>
+ <function-decl name='localeconv' filepath='/usr/include/locale.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-106'/>
+ </function-decl>
+ <typedef-decl name='wctype_t' type-id='type-id-31' filepath='/usr/include/wctype.h' line='52' column='1' id='type-id-107'/>
+ <function-decl name='iswctype' filepath='/usr/include/wctype.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-107'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <typedef-decl name='__int32_t' type-id='type-id-36' filepath='/usr/include/bits/types.h' line='40' column='1' id='type-id-108'/>
+ <qualified-type-def type-id='type-id-108' const='yes' id='type-id-109'/>
+ <pointer-type-def type-id='type-id-109' size-in-bits='64' id='type-id-110'/>
+ <typedef-decl name='wctrans_t' type-id='type-id-110' filepath='/usr/include/wctype.h' line='186' column='1' id='type-id-111'/>
+ <function-decl name='towctrans' filepath='/usr/include/wctype.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-111'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='wctrans' filepath='/usr/include/wctype.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-111'/>
+ </function-decl>
+ <function-decl name='wctype' filepath='/usr/include/wctype.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-107'/>
+ </function-decl>
+ <reference-type-def kind='lvalue' type-id='type-id-33' size-in-bits='64' id='type-id-112'/>
+ <qualified-type-def type-id='type-id-33' const='yes' id='type-id-113'/>
+ <reference-type-def kind='lvalue' type-id='type-id-113' size-in-bits='64' id='type-id-114'/>
+ <pointer-type-def type-id='type-id-113' size-in-bits='64' id='type-id-115'/>
+ <pointer-type-def type-id='type-id-33' size-in-bits='64' id='type-id-116'/>
+ <qualified-type-def type-id='type-id-35' const='yes' id='type-id-117'/>
+ <reference-type-def kind='lvalue' type-id='type-id-117' size-in-bits='64' id='type-id-118'/>
+ <qualified-type-def type-id='type-id-37' const='yes' id='type-id-119'/>
+ <reference-type-def kind='lvalue' type-id='type-id-119' size-in-bits='64' id='type-id-120'/>
+ <qualified-type-def type-id='type-id-120' id='type-id-121'/>
+ <function-decl name='foo' mangled-name='_Z3fooRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3fooRKSs'>
+ <parameter type-id='type-id-121' name='s' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1'/>
+ <return type-id='type-id-37'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-122'/>
+ <function-decl name='bar' mangled-name='_Z3barRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3barRKSs'>
+ <parameter type-id='type-id-121' name='str' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1'/>
+ <return type-id='type-id-122'/>
+ </function-decl>
+ <var-decl name='__dso_handle' type-id='type-id-48' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
--- /dev/null
+<abi-corpus path='tests/data/test-read-dwarf/libtest24-drop-fns.so' architecture='elf-amd-x86_64'>
+ <elf-needed>
+ <dependency name='libgcc_s.so.1'/>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='_Z3barRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_Z3fooRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_ZNSt11char_traitsIcE6lengthEPKc' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_fini' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_init' type='func-type' binding='global-binding' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test24-drop-fns.cc' language='LANG_C_plus_plus'>
+ <namespace-decl name='std'>
+ <namespace-decl name='__debug'>
+ </namespace-decl>
+ <class-decl name='basic_ostream<char, std::char_traits<char> >' visibility='default' is-declaration-only='yes' id='type-id-1'/>
+ <typedef-decl name='ostream' type-id='type-id-1' filepath='/usr/include/c++/5.3.1/iosfwd' line='141' column='1' id='type-id-2'/>
+ <var-decl name='cout' type-id='type-id-2' mangled-name='_ZSt4cout' visibility='default' filepath='/usr/include/c++/5.3.1/iostream' line='61' column='1'/>
+ <class-decl name='basic_string<char, std::char_traits<char>, std::allocator<char> >' size-in-bits='64' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2510' column='1' id='type-id-3'>
+ <member-type access='private'>
+ <class-decl name='_Alloc_hider' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2670' column='1' id='type-id-4'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-5'/>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_p' type-id='type-id-6' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2675' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-8' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2519' column='1' id='type-id-7'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='allocator_type' type-id='type-id-5' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2518' column='1' id='type-id-9'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-11' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2521' column='1' id='type-id-10'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-13' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2522' column='1' id='type-id-12'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='iterator' type-id='type-id-15' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2525' column='1' id='type-id-14'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_iterator' type-id='type-id-17' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2527' column='1' id='type-id-16'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reverse_iterator' type-id='type-id-19' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2528' column='1' id='type-id-18'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reverse_iterator' type-id='type-id-21' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2529' column='1' id='type-id-20'/>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2546' column='1' id='type-id-22'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_length' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2548' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='_M_capacity' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2549' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='_M_refcount' type-id='type-id-23' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2550' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2553' column='1' id='type-id-24'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-22'/>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_max_size' type-id='type-id-25' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='494' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_terminal' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='499' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <data-member access='public' static='yes'>
+ <var-decl name='npos' type-id='type-id-25' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2683' column='1'/>
+ </data-member>
+ <data-member access='private' layout-offset-in-bits='0'>
+ <var-decl name='_M_dataplus' type-id='type-id-4' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2687' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-5'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-27'/>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='95' column='1' id='type-id-8'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='99' column='1' id='type-id-11'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-30' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='100' column='1' id='type-id-13'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='size_t' type-id='type-id-31' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/c++config.h' line='1969' column='1' id='type-id-28'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-19'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-21'/>
+ <class-decl name='char_traits<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='233' column='1' id='type-id-32'>
+ <member-type access='public'>
+ <typedef-decl name='char_type' type-id='type-id-34' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='235' column='1' id='type-id-33'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='int_type' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='236' column='1' id='type-id-35'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='string' type-id='type-id-3' filepath='/usr/include/c++/5.3.1/bits/stringfwd.h' line='74' column='1' id='type-id-37'/>
+ </namespace-decl>
+ <namespace-decl name='__gnu_cxx'>
+ <namespace-decl name='__ops'>
+ </namespace-decl>
+ <class-decl name='new_allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='58' column='1' id='type-id-27'>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='61' column='1' id='type-id-38'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='pointer' type-id='type-id-6' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='63' column='1' id='type-id-39'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_pointer' type-id='type-id-41' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='64' column='1' id='type-id-40'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='65' column='1' id='type-id-42'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-30' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='66' column='1' id='type-id-43'/>
+ </member-type>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4ERKS1_' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcED4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-36' is-artificial='yes'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <parameter type-id='type-id-43'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='allocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-38'/>
+ <parameter type-id='type-id-48'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='deallocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='max_size' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='construct' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-30'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='destroy' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE7destroyEPc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <class-decl name='__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-15'/>
+ <class-decl name='__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-17'/>
+ <class-decl name='__numeric_traits_integer<int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-49'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long unsigned int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-52'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-53' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-53' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-54'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-26' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<short int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-55'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-56' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-56' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-57'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-58' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-58' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ </namespace-decl>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-31'/>
+ <type-decl name='char' size-in-bits='8' id='type-id-34'/>
+ <pointer-type-def type-id='type-id-34' size-in-bits='64' id='type-id-6'/>
+ <qualified-type-def type-id='type-id-34' const='yes' id='type-id-26'/>
+ <pointer-type-def type-id='type-id-26' size-in-bits='64' id='type-id-41'/>
+ <reference-type-def kind='lvalue' type-id='type-id-34' size-in-bits='64' id='type-id-29'/>
+ <reference-type-def kind='lvalue' type-id='type-id-26' size-in-bits='64' id='type-id-30'/>
+ <pointer-type-def type-id='type-id-27' size-in-bits='64' id='type-id-44'/>
+ <type-decl name='void' id='type-id-45'/>
+ <qualified-type-def type-id='type-id-27' const='yes' id='type-id-59'/>
+ <reference-type-def kind='lvalue' type-id='type-id-59' size-in-bits='64' id='type-id-46'/>
+ <type-decl name='int' size-in-bits='32' id='type-id-36'/>
+ <pointer-type-def type-id='type-id-59' size-in-bits='64' id='type-id-47'/>
+ <pointer-type-def type-id='type-id-45' size-in-bits='64' id='type-id-48'/>
+ <qualified-type-def type-id='type-id-36' const='yes' id='type-id-50'/>
+ <type-decl name='bool' size-in-bits='8' id='type-id-60'/>
+ <qualified-type-def type-id='type-id-60' const='yes' id='type-id-51'/>
+ <qualified-type-def type-id='type-id-31' const='yes' id='type-id-53'/>
+ <type-decl name='short int' size-in-bits='16' id='type-id-61'/>
+ <qualified-type-def type-id='type-id-61' const='yes' id='type-id-56'/>
+ <type-decl name='long int' size-in-bits='64' id='type-id-62'/>
+ <qualified-type-def type-id='type-id-62' const='yes' id='type-id-58'/>
+ <typedef-decl name='_Atomic_word' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/atomic_word.h' line='32' column='1' id='type-id-23'/>
+ <qualified-type-def type-id='type-id-7' const='yes' id='type-id-25'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-63'/>
+ <qualified-type-def type-id='type-id-5' const='yes' id='type-id-64'/>
+ <reference-type-def kind='lvalue' type-id='type-id-64' size-in-bits='64' id='type-id-65'/>
+ <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-66'/>
+ <reference-type-def kind='lvalue' type-id='type-id-24' size-in-bits='64' id='type-id-67'/>
+ <qualified-type-def type-id='type-id-24' const='yes' id='type-id-68'/>
+ <pointer-type-def type-id='type-id-68' size-in-bits='64' id='type-id-69'/>
+ <pointer-type-def type-id='type-id-24' size-in-bits='64' id='type-id-70'/>
+ <qualified-type-def type-id='type-id-3' const='yes' id='type-id-71'/>
+ <pointer-type-def type-id='type-id-71' size-in-bits='64' id='type-id-72'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-73'/>
+ <reference-type-def kind='lvalue' type-id='type-id-71' size-in-bits='64' id='type-id-74'/>
+ <reference-type-def kind='lvalue' type-id='type-id-3' size-in-bits='64' id='type-id-75'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-76'/>
+ <typedef-decl name='wint_t' type-id='type-id-76' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='357' column='1' id='type-id-77'/>
+ <function-decl name='btowc' filepath='/usr/include/wchar.h' line='353' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-78'/>
+ <typedef-decl name='__FILE' type-id='type-id-78' filepath='/usr/include/stdio.h' line='64' column='1' id='type-id-79'/>
+ <pointer-type-def type-id='type-id-79' size-in-bits='64' id='type-id-80'/>
+ <function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <type-decl name='wchar_t' size-in-bits='32' id='type-id-81'/>
+ <pointer-type-def type-id='type-id-81' size-in-bits='64' id='type-id-82'/>
+ <function-decl name='fgetws' filepath='/usr/include/wchar.h' line='774' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='fputwc' filepath='/usr/include/wchar.h' line='759' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-81' const='yes' id='type-id-83'/>
+ <pointer-type-def type-id='type-id-83' size-in-bits='64' id='type-id-84'/>
+ <function-decl name='fputws' filepath='/usr/include/wchar.h' line='781' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwide' filepath='/usr/include/wchar.h' line='587' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwprintf' filepath='/usr/include/wchar.h' line='594' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwscanf' filepath='/usr/include/wchar.h' line='635' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='getwc' filepath='/usr/include/wchar.h' line='746' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='getwchar' filepath='/usr/include/wchar.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <typedef-decl name='size_t' type-id='type-id-31' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='216' column='1' id='type-id-85'/>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/wchar.h' line='83' column='1' id='type-id-86'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='__count' type-id='type-id-36' visibility='default' filepath='/usr/include/wchar.h' line='84' column='1'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='__mbstate_t' type-id='type-id-86' filepath='/usr/include/wchar.h' line='94' column='1' id='type-id-87'/>
+ <typedef-decl name='mbstate_t' type-id='type-id-87' filepath='/usr/include/wchar.h' line='106' column='1' id='type-id-88'/>
+ <pointer-type-def type-id='type-id-88' size-in-bits='64' id='type-id-89'/>
+ <function-decl name='mbrlen' filepath='/usr/include/wchar.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='mbrtowc' filepath='/usr/include/wchar.h' line='365' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-41'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-88' const='yes' id='type-id-90'/>
+ <pointer-type-def type-id='type-id-90' size-in-bits='64' id='type-id-91'/>
+ <function-decl name='mbsinit' filepath='/usr/include/wchar.h' line='361' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-91'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-41' size-in-bits='64' id='type-id-92'/>
+ <function-decl name='mbsrtowcs' filepath='/usr/include/wchar.h' line='408' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-92'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='putwc' filepath='/usr/include/wchar.h' line='760' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='putwchar' filepath='/usr/include/wchar.h' line='766' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='swprintf' filepath='/usr/include/wchar.h' line='604' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='swscanf' filepath='/usr/include/wchar.h' line='645' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='ungetwc' filepath='/usr/include/wchar.h' line='789' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='typedef __va_list_tag __va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='type-id-93'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='gp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='fp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='overflow_arg_area' type-id='type-id-48' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='reg_save_area' type-id='type-id-48' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-93' size-in-bits='64' id='type-id-94'/>
+ <function-decl name='vfwprintf' filepath='/usr/include/wchar.h' line='612' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vfwscanf' filepath='/usr/include/wchar.h' line='689' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vswprintf' filepath='/usr/include/wchar.h' line='625' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vswscanf' filepath='/usr/include/wchar.h' line='701' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vwprintf' filepath='/usr/include/wchar.h' line='620' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vwscanf' filepath='/usr/include/wchar.h' line='697' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcrtomb' filepath='/usr/include/wchar.h' line='370' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcscat' filepath='/usr/include/wchar.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscmp' filepath='/usr/include/wchar.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcscoll' filepath='/usr/include/wchar.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcscpy' filepath='/usr/include/wchar.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscspn' filepath='/usr/include/wchar.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' filepath='/usr/include/time.h' line='133' column='1' id='type-id-95'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='tm_sec' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='135' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='tm_min' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='136' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tm_hour' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='137' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='96'>
+ <var-decl name='tm_mday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='138' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='tm_mon' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='139' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='160'>
+ <var-decl name='tm_year' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='140' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='tm_wday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='141' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='224'>
+ <var-decl name='tm_yday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='142' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='tm_isdst' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='143' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='tm_gmtoff' type-id='type-id-62' visibility='default' filepath='/usr/include/time.h' line='146' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='tm_zone' type-id='type-id-41' visibility='default' filepath='/usr/include/time.h' line='147' column='1'/>
+ </data-member>
+ </class-decl>
+ <qualified-type-def type-id='type-id-95' const='yes' id='type-id-96'/>
+ <pointer-type-def type-id='type-id-96' size-in-bits='64' id='type-id-97'/>
+ <function-decl name='wcsftime' filepath='/usr/include/wchar.h' line='855' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcslen' filepath='/usr/include/wchar.h' line='287' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsncat' filepath='/usr/include/wchar.h' line='158' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcsncmp' filepath='/usr/include/wchar.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcsncpy' filepath='/usr/include/wchar.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-84' size-in-bits='64' id='type-id-98'/>
+ <function-decl name='wcsrtombs' filepath='/usr/include/wchar.h' line='414' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-98'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsspn' filepath='/usr/include/wchar.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <type-decl name='double' size-in-bits='64' id='type-id-99'/>
+ <pointer-type-def type-id='type-id-82' size-in-bits='64' id='type-id-100'/>
+ <function-decl name='wcstod' filepath='/usr/include/wchar.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-99'/>
+ </function-decl>
+ <type-decl name='float' size-in-bits='32' id='type-id-101'/>
+ <function-decl name='wcstof' filepath='/usr/include/wchar.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-101'/>
+ </function-decl>
+ <function-decl name='wcstok' filepath='/usr/include/wchar.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcstol' filepath='/usr/include/wchar.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-62'/>
+ </function-decl>
+ <function-decl name='wcstoul' filepath='/usr/include/wchar.h' line='473' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-31'/>
+ </function-decl>
+ <function-decl name='wcsxfrm' filepath='/usr/include/wchar.h' line='196' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wctob' filepath='/usr/include/wchar.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wmemcmp' filepath='/usr/include/wchar.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wmemcpy' filepath='/usr/include/wchar.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemmove' filepath='/usr/include/wchar.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemset' filepath='/usr/include/wchar.h' line='338' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wprintf' filepath='/usr/include/wchar.h' line='601' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wscanf' filepath='/usr/include/wchar.h' line='642' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcschr' mangled-name='wcschr' filepath='/usr/include/wchar.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcspbrk' mangled-name='wcspbrk' filepath='/usr/include/wchar.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsrchr' mangled-name='wcsrchr' filepath='/usr/include/wchar.h' line='234' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsstr' mangled-name='wcsstr' filepath='/usr/include/wchar.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wmemchr' mangled-name='wmemchr' filepath='/usr/include/wchar.h' line='316' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <type-decl name='long double' size-in-bits='128' id='type-id-102'/>
+ <function-decl name='wcstold' filepath='/usr/include/wchar.h' line='459' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-102'/>
+ </function-decl>
+ <type-decl name='long long int' size-in-bits='64' id='type-id-103'/>
+ <function-decl name='wcstoll' filepath='/usr/include/wchar.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-103'/>
+ </function-decl>
+ <type-decl name='long long unsigned int' size-in-bits='64' id='type-id-104'/>
+ <function-decl name='wcstoull' filepath='/usr/include/wchar.h' line='490' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-104'/>
+ </function-decl>
+ <namespace-decl name='__gnu_debug'>
+ </namespace-decl>
+ <function-decl name='setlocale' filepath='/usr/include/locale.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='53' column='1' id='type-id-105'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='57' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='64' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='int_curr_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='70' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='currency_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='71' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='mon_decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='72' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='mon_thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='73' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='mon_grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='74' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='512'>
+ <var-decl name='positive_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='75' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='576'>
+ <var-decl name='negative_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='76' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='640'>
+ <var-decl name='int_frac_digits' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='77' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='648'>
+ <var-decl name='frac_digits' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='78' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='656'>
+ <var-decl name='p_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='80' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='664'>
+ <var-decl name='p_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='82' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='672'>
+ <var-decl name='n_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='84' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='680'>
+ <var-decl name='n_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='86' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='688'>
+ <var-decl name='p_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='93' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='696'>
+ <var-decl name='n_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='94' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='704'>
+ <var-decl name='int_p_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='97' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='712'>
+ <var-decl name='int_p_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='99' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='720'>
+ <var-decl name='int_n_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='101' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='728'>
+ <var-decl name='int_n_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='103' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='736'>
+ <var-decl name='int_p_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='110' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='744'>
+ <var-decl name='int_n_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='111' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-105' size-in-bits='64' id='type-id-106'/>
+ <function-decl name='localeconv' filepath='/usr/include/locale.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-106'/>
+ </function-decl>
+ <typedef-decl name='wctype_t' type-id='type-id-31' filepath='/usr/include/wctype.h' line='52' column='1' id='type-id-107'/>
+ <function-decl name='iswctype' filepath='/usr/include/wctype.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-107'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <typedef-decl name='__int32_t' type-id='type-id-36' filepath='/usr/include/bits/types.h' line='40' column='1' id='type-id-108'/>
+ <qualified-type-def type-id='type-id-108' const='yes' id='type-id-109'/>
+ <pointer-type-def type-id='type-id-109' size-in-bits='64' id='type-id-110'/>
+ <typedef-decl name='wctrans_t' type-id='type-id-110' filepath='/usr/include/wctype.h' line='186' column='1' id='type-id-111'/>
+ <function-decl name='towctrans' filepath='/usr/include/wctype.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-111'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='wctrans' filepath='/usr/include/wctype.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-111'/>
+ </function-decl>
+ <function-decl name='wctype' filepath='/usr/include/wctype.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-107'/>
+ </function-decl>
+ <reference-type-def kind='lvalue' type-id='type-id-33' size-in-bits='64' id='type-id-112'/>
+ <qualified-type-def type-id='type-id-33' const='yes' id='type-id-113'/>
+ <reference-type-def kind='lvalue' type-id='type-id-113' size-in-bits='64' id='type-id-114'/>
+ <pointer-type-def type-id='type-id-113' size-in-bits='64' id='type-id-115'/>
+ <pointer-type-def type-id='type-id-33' size-in-bits='64' id='type-id-116'/>
+ <qualified-type-def type-id='type-id-35' const='yes' id='type-id-117'/>
+ <reference-type-def kind='lvalue' type-id='type-id-117' size-in-bits='64' id='type-id-118'/>
+ <qualified-type-def type-id='type-id-37' const='yes' id='type-id-119'/>
+ <reference-type-def kind='lvalue' type-id='type-id-119' size-in-bits='64' id='type-id-120'/>
+ <qualified-type-def type-id='type-id-120' id='type-id-121'/>
+ <function-decl name='foo' mangled-name='_Z3fooRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3fooRKSs'>
+ <parameter type-id='type-id-121' name='s' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1'/>
+ <return type-id='type-id-37'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-122'/>
+ <function-decl name='bar' mangled-name='_Z3barRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3barRKSs'>
+ <parameter type-id='type-id-121' name='str' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1'/>
+ <return type-id='type-id-122'/>
+ </function-decl>
+ <var-decl name='__dso_handle' type-id='type-id-48' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
--- /dev/null
+<abi-corpus path='tests/data/test-read-dwarf/libtest24-drop-fns.so'>
+ <elf-needed>
+ <dependency name='libgcc_s.so.1'/>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='_Z3barRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_Z3fooRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_ZNSt11char_traitsIcE6lengthEPKc' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_fini' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_init' type='func-type' binding='global-binding' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test24-drop-fns.cc' language='LANG_C_plus_plus'>
+ <namespace-decl name='std'>
+
+ <class-decl name='basic_ostream<char, std::char_traits<char> >' visibility='default' is-declaration-only='yes' id='type-id-1'/>
+ <typedef-decl name='ostream' type-id='type-id-1' filepath='/usr/include/c++/5.3.1/iosfwd' line='141' column='1' id='type-id-2'/>
+ <class-decl name='basic_string<char, std::char_traits<char>, std::allocator<char> >' size-in-bits='64' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2510' column='1' id='type-id-3'>
+ <member-type access='private'>
+ <class-decl name='_Alloc_hider' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2670' column='1' id='type-id-4'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-5'/>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_p' type-id='type-id-6' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2675' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-8' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2519' column='1' id='type-id-7'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='allocator_type' type-id='type-id-5' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2518' column='1' id='type-id-9'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-11' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2521' column='1' id='type-id-10'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-13' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2522' column='1' id='type-id-12'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='iterator' type-id='type-id-15' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2525' column='1' id='type-id-14'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_iterator' type-id='type-id-17' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2527' column='1' id='type-id-16'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reverse_iterator' type-id='type-id-19' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2528' column='1' id='type-id-18'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reverse_iterator' type-id='type-id-21' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2529' column='1' id='type-id-20'/>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2546' column='1' id='type-id-22'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_length' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2548' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='_M_capacity' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2549' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='_M_refcount' type-id='type-id-23' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2550' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2553' column='1' id='type-id-24'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-22'/>
+ </class-decl>
+ </member-type>
+ <data-member access='private' layout-offset-in-bits='0'>
+ <var-decl name='_M_dataplus' type-id='type-id-4' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2687' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-5'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-25'/>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-26' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='95' column='1' id='type-id-8'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-27' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='99' column='1' id='type-id-11'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='100' column='1' id='type-id-13'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='size_t' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/c++config.h' line='1969' column='1' id='type-id-26'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-19'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-21'/>
+ <class-decl name='char_traits<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='233' column='1' id='type-id-30'>
+ <member-type access='public'>
+ <typedef-decl name='char_type' type-id='type-id-32' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='235' column='1' id='type-id-31'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='int_type' type-id='type-id-34' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='236' column='1' id='type-id-33'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='string' type-id='type-id-3' filepath='/usr/include/c++/5.3.1/bits/stringfwd.h' line='74' column='1' id='type-id-35'/>
+ </namespace-decl>
+ <namespace-decl name='__gnu_cxx'>
+
+ <class-decl name='new_allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='58' column='1' id='type-id-25'>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-26' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='61' column='1' id='type-id-36'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='pointer' type-id='type-id-6' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='63' column='1' id='type-id-37'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_pointer' type-id='type-id-39' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='64' column='1' id='type-id-38'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-27' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='65' column='1' id='type-id-40'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='66' column='1' id='type-id-41'/>
+ </member-type>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42' is-artificial='yes'/>
+ <return type-id='type-id-43'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4ERKS1_' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42' is-artificial='yes'/>
+ <parameter type-id='type-id-44'/>
+ <return type-id='type-id-43'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcED4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42' is-artificial='yes'/>
+ <parameter type-id='type-id-34' is-artificial='yes'/>
+ <return type-id='type-id-43'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-45' is-artificial='yes'/>
+ <parameter type-id='type-id-40'/>
+ <return type-id='type-id-37'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-45' is-artificial='yes'/>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='allocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42' is-artificial='yes'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-37'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='deallocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-43'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='max_size' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-45' is-artificial='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='construct' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <parameter type-id='type-id-28'/>
+ <return type-id='type-id-43'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='destroy' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE7destroyEPc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-42' is-artificial='yes'/>
+ <parameter type-id='type-id-37'/>
+ <return type-id='type-id-43'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <class-decl name='__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-15'/>
+ <class-decl name='__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-17'/>
+ <class-decl name='__numeric_traits_integer<int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-47'/>
+ <class-decl name='__numeric_traits_integer<long unsigned int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-48'/>
+ <class-decl name='__numeric_traits_integer<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-49'/>
+ <class-decl name='__numeric_traits_integer<short int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-50'/>
+ <class-decl name='__numeric_traits_integer<long int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-51'/>
+ </namespace-decl>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-29'/>
+ <type-decl name='char' size-in-bits='8' id='type-id-32'/>
+ <pointer-type-def type-id='type-id-32' size-in-bits='64' id='type-id-6'/>
+ <qualified-type-def type-id='type-id-32' const='yes' id='type-id-52'/>
+ <pointer-type-def type-id='type-id-52' size-in-bits='64' id='type-id-39'/>
+ <reference-type-def kind='lvalue' type-id='type-id-32' size-in-bits='64' id='type-id-27'/>
+ <reference-type-def kind='lvalue' type-id='type-id-52' size-in-bits='64' id='type-id-28'/>
+ <pointer-type-def type-id='type-id-25' size-in-bits='64' id='type-id-42'/>
+ <type-decl name='void' id='type-id-43'/>
+ <qualified-type-def type-id='type-id-25' const='yes' id='type-id-53'/>
+ <reference-type-def kind='lvalue' type-id='type-id-53' size-in-bits='64' id='type-id-44'/>
+ <type-decl name='int' size-in-bits='32' id='type-id-34'/>
+ <pointer-type-def type-id='type-id-53' size-in-bits='64' id='type-id-45'/>
+ <pointer-type-def type-id='type-id-43' size-in-bits='64' id='type-id-46'/>
+ <qualified-type-def type-id='type-id-34' const='yes' id='type-id-54'/>
+ <type-decl name='bool' size-in-bits='8' id='type-id-55'/>
+ <qualified-type-def type-id='type-id-55' const='yes' id='type-id-56'/>
+ <qualified-type-def type-id='type-id-29' const='yes' id='type-id-57'/>
+ <type-decl name='short int' size-in-bits='16' id='type-id-58'/>
+ <qualified-type-def type-id='type-id-58' const='yes' id='type-id-59'/>
+ <type-decl name='long int' size-in-bits='64' id='type-id-60'/>
+ <qualified-type-def type-id='type-id-60' const='yes' id='type-id-61'/>
+ <typedef-decl name='_Atomic_word' type-id='type-id-34' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/atomic_word.h' line='32' column='1' id='type-id-23'/>
+ <qualified-type-def type-id='type-id-7' const='yes' id='type-id-62'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-63'/>
+ <qualified-type-def type-id='type-id-5' const='yes' id='type-id-64'/>
+ <reference-type-def kind='lvalue' type-id='type-id-64' size-in-bits='64' id='type-id-65'/>
+ <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-66'/>
+ <reference-type-def kind='lvalue' type-id='type-id-24' size-in-bits='64' id='type-id-67'/>
+ <qualified-type-def type-id='type-id-24' const='yes' id='type-id-68'/>
+ <pointer-type-def type-id='type-id-68' size-in-bits='64' id='type-id-69'/>
+ <pointer-type-def type-id='type-id-24' size-in-bits='64' id='type-id-70'/>
+ <qualified-type-def type-id='type-id-3' const='yes' id='type-id-71'/>
+ <pointer-type-def type-id='type-id-71' size-in-bits='64' id='type-id-72'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-73'/>
+ <reference-type-def kind='lvalue' type-id='type-id-71' size-in-bits='64' id='type-id-74'/>
+ <reference-type-def kind='lvalue' type-id='type-id-3' size-in-bits='64' id='type-id-75'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-76'/>
+ <typedef-decl name='wint_t' type-id='type-id-76' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='357' column='1' id='type-id-77'/>
+ <function-decl name='btowc' filepath='/usr/include/wchar.h' line='353' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-78'/>
+ <typedef-decl name='__FILE' type-id='type-id-78' filepath='/usr/include/stdio.h' line='64' column='1' id='type-id-79'/>
+ <pointer-type-def type-id='type-id-79' size-in-bits='64' id='type-id-80'/>
+ <function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <type-decl name='wchar_t' size-in-bits='32' id='type-id-81'/>
+ <pointer-type-def type-id='type-id-81' size-in-bits='64' id='type-id-82'/>
+ <function-decl name='fgetws' filepath='/usr/include/wchar.h' line='774' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-34'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='fputwc' filepath='/usr/include/wchar.h' line='759' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-81' const='yes' id='type-id-83'/>
+ <pointer-type-def type-id='type-id-83' size-in-bits='64' id='type-id-84'/>
+ <function-decl name='fputws' filepath='/usr/include/wchar.h' line='781' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='fwide' filepath='/usr/include/wchar.h' line='587' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-34'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='fwprintf' filepath='/usr/include/wchar.h' line='594' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='fwscanf' filepath='/usr/include/wchar.h' line='635' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='getwc' filepath='/usr/include/wchar.h' line='746' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='getwchar' filepath='/usr/include/wchar.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <typedef-decl name='size_t' type-id='type-id-29' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='216' column='1' id='type-id-85'/>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/wchar.h' line='83' column='1' id='type-id-86'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='__count' type-id='type-id-34' visibility='default' filepath='/usr/include/wchar.h' line='84' column='1'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='__mbstate_t' type-id='type-id-86' filepath='/usr/include/wchar.h' line='94' column='1' id='type-id-87'/>
+ <typedef-decl name='mbstate_t' type-id='type-id-87' filepath='/usr/include/wchar.h' line='106' column='1' id='type-id-88'/>
+ <pointer-type-def type-id='type-id-88' size-in-bits='64' id='type-id-89'/>
+ <function-decl name='mbrlen' filepath='/usr/include/wchar.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='mbrtowc' filepath='/usr/include/wchar.h' line='365' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-88' const='yes' id='type-id-90'/>
+ <pointer-type-def type-id='type-id-90' size-in-bits='64' id='type-id-91'/>
+ <function-decl name='mbsinit' filepath='/usr/include/wchar.h' line='361' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-91'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-39' size-in-bits='64' id='type-id-92'/>
+ <function-decl name='mbsrtowcs' filepath='/usr/include/wchar.h' line='408' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-92'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='putwc' filepath='/usr/include/wchar.h' line='760' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='putwchar' filepath='/usr/include/wchar.h' line='766' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='swprintf' filepath='/usr/include/wchar.h' line='604' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='swscanf' filepath='/usr/include/wchar.h' line='645' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='ungetwc' filepath='/usr/include/wchar.h' line='789' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='typedef __va_list_tag __va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='type-id-93'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='gp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='fp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='overflow_arg_area' type-id='type-id-46' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='reg_save_area' type-id='type-id-46' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-93' size-in-bits='64' id='type-id-94'/>
+ <function-decl name='vfwprintf' filepath='/usr/include/wchar.h' line='612' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='vfwscanf' filepath='/usr/include/wchar.h' line='689' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='vswprintf' filepath='/usr/include/wchar.h' line='625' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='vswscanf' filepath='/usr/include/wchar.h' line='701' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='vwprintf' filepath='/usr/include/wchar.h' line='620' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='vwscanf' filepath='/usr/include/wchar.h' line='697' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='wcrtomb' filepath='/usr/include/wchar.h' line='370' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcscat' filepath='/usr/include/wchar.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscmp' filepath='/usr/include/wchar.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='wcscoll' filepath='/usr/include/wchar.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='wcscpy' filepath='/usr/include/wchar.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscspn' filepath='/usr/include/wchar.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' filepath='/usr/include/time.h' line='133' column='1' id='type-id-95'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='tm_sec' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='135' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='tm_min' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='136' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tm_hour' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='137' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='96'>
+ <var-decl name='tm_mday' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='138' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='tm_mon' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='139' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='160'>
+ <var-decl name='tm_year' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='140' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='tm_wday' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='141' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='224'>
+ <var-decl name='tm_yday' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='142' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='tm_isdst' type-id='type-id-34' visibility='default' filepath='/usr/include/time.h' line='143' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='tm_gmtoff' type-id='type-id-60' visibility='default' filepath='/usr/include/time.h' line='146' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='tm_zone' type-id='type-id-39' visibility='default' filepath='/usr/include/time.h' line='147' column='1'/>
+ </data-member>
+ </class-decl>
+ <qualified-type-def type-id='type-id-95' const='yes' id='type-id-96'/>
+ <pointer-type-def type-id='type-id-96' size-in-bits='64' id='type-id-97'/>
+ <function-decl name='wcsftime' filepath='/usr/include/wchar.h' line='855' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcslen' filepath='/usr/include/wchar.h' line='287' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsncat' filepath='/usr/include/wchar.h' line='158' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcsncmp' filepath='/usr/include/wchar.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='wcsncpy' filepath='/usr/include/wchar.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-84' size-in-bits='64' id='type-id-98'/>
+ <function-decl name='wcsrtombs' filepath='/usr/include/wchar.h' line='414' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-98'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsspn' filepath='/usr/include/wchar.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <type-decl name='double' size-in-bits='64' id='type-id-99'/>
+ <pointer-type-def type-id='type-id-82' size-in-bits='64' id='type-id-100'/>
+ <function-decl name='wcstod' filepath='/usr/include/wchar.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-99'/>
+ </function-decl>
+ <type-decl name='float' size-in-bits='32' id='type-id-101'/>
+ <function-decl name='wcstof' filepath='/usr/include/wchar.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-101'/>
+ </function-decl>
+ <function-decl name='wcstok' filepath='/usr/include/wchar.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcstol' filepath='/usr/include/wchar.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-34'/>
+ <return type-id='type-id-60'/>
+ </function-decl>
+ <function-decl name='wcstoul' filepath='/usr/include/wchar.h' line='473' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-34'/>
+ <return type-id='type-id-29'/>
+ </function-decl>
+ <function-decl name='wcsxfrm' filepath='/usr/include/wchar.h' line='196' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wctob' filepath='/usr/include/wchar.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='wmemcmp' filepath='/usr/include/wchar.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='wmemcpy' filepath='/usr/include/wchar.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemmove' filepath='/usr/include/wchar.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemset' filepath='/usr/include/wchar.h' line='338' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wprintf' filepath='/usr/include/wchar.h' line='601' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='wscanf' filepath='/usr/include/wchar.h' line='642' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <function-decl name='wcschr' mangled-name='wcschr' filepath='/usr/include/wchar.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcspbrk' mangled-name='wcspbrk' filepath='/usr/include/wchar.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsrchr' mangled-name='wcsrchr' filepath='/usr/include/wchar.h' line='234' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsstr' mangled-name='wcsstr' filepath='/usr/include/wchar.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wmemchr' mangled-name='wmemchr' filepath='/usr/include/wchar.h' line='316' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <type-decl name='long double' size-in-bits='128' id='type-id-102'/>
+ <function-decl name='wcstold' filepath='/usr/include/wchar.h' line='459' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-102'/>
+ </function-decl>
+ <type-decl name='long long int' size-in-bits='64' id='type-id-103'/>
+ <function-decl name='wcstoll' filepath='/usr/include/wchar.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-34'/>
+ <return type-id='type-id-103'/>
+ </function-decl>
+ <type-decl name='long long unsigned int' size-in-bits='64' id='type-id-104'/>
+ <function-decl name='wcstoull' filepath='/usr/include/wchar.h' line='490' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-34'/>
+ <return type-id='type-id-104'/>
+ </function-decl>
+
+ <function-decl name='setlocale' filepath='/usr/include/locale.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-34'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='53' column='1' id='type-id-105'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='57' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='64' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='int_curr_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='70' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='currency_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='71' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='mon_decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='72' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='mon_thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='73' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='mon_grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='74' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='512'>
+ <var-decl name='positive_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='75' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='576'>
+ <var-decl name='negative_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='76' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='640'>
+ <var-decl name='int_frac_digits' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='77' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='648'>
+ <var-decl name='frac_digits' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='78' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='656'>
+ <var-decl name='p_cs_precedes' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='80' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='664'>
+ <var-decl name='p_sep_by_space' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='82' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='672'>
+ <var-decl name='n_cs_precedes' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='84' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='680'>
+ <var-decl name='n_sep_by_space' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='86' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='688'>
+ <var-decl name='p_sign_posn' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='93' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='696'>
+ <var-decl name='n_sign_posn' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='94' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='704'>
+ <var-decl name='int_p_cs_precedes' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='97' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='712'>
+ <var-decl name='int_p_sep_by_space' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='99' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='720'>
+ <var-decl name='int_n_cs_precedes' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='101' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='728'>
+ <var-decl name='int_n_sep_by_space' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='103' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='736'>
+ <var-decl name='int_p_sign_posn' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='110' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='744'>
+ <var-decl name='int_n_sign_posn' type-id='type-id-32' visibility='default' filepath='/usr/include/locale.h' line='111' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-105' size-in-bits='64' id='type-id-106'/>
+ <function-decl name='localeconv' filepath='/usr/include/locale.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-106'/>
+ </function-decl>
+ <typedef-decl name='wctype_t' type-id='type-id-29' filepath='/usr/include/wctype.h' line='52' column='1' id='type-id-107'/>
+ <function-decl name='iswctype' filepath='/usr/include/wctype.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-107'/>
+ <return type-id='type-id-34'/>
+ </function-decl>
+ <typedef-decl name='__int32_t' type-id='type-id-34' filepath='/usr/include/bits/types.h' line='40' column='1' id='type-id-108'/>
+ <qualified-type-def type-id='type-id-108' const='yes' id='type-id-109'/>
+ <pointer-type-def type-id='type-id-109' size-in-bits='64' id='type-id-110'/>
+ <typedef-decl name='wctrans_t' type-id='type-id-110' filepath='/usr/include/wctype.h' line='186' column='1' id='type-id-111'/>
+ <function-decl name='towctrans' filepath='/usr/include/wctype.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-111'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='wctrans' filepath='/usr/include/wctype.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-111'/>
+ </function-decl>
+ <function-decl name='wctype' filepath='/usr/include/wctype.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-107'/>
+ </function-decl>
+ <reference-type-def kind='lvalue' type-id='type-id-31' size-in-bits='64' id='type-id-112'/>
+ <qualified-type-def type-id='type-id-31' const='yes' id='type-id-113'/>
+ <reference-type-def kind='lvalue' type-id='type-id-113' size-in-bits='64' id='type-id-114'/>
+ <pointer-type-def type-id='type-id-113' size-in-bits='64' id='type-id-115'/>
+ <pointer-type-def type-id='type-id-31' size-in-bits='64' id='type-id-116'/>
+ <qualified-type-def type-id='type-id-33' const='yes' id='type-id-117'/>
+ <reference-type-def kind='lvalue' type-id='type-id-117' size-in-bits='64' id='type-id-118'/>
+ <qualified-type-def type-id='type-id-35' const='yes' id='type-id-119'/>
+ <reference-type-def kind='lvalue' type-id='type-id-119' size-in-bits='64' id='type-id-120'/>
+ <qualified-type-def type-id='type-id-120' id='type-id-121'/>
+ <function-decl name='foo' mangled-name='_Z3fooRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3fooRKSs'>
+ <parameter type-id='type-id-121' name='s' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1'/>
+ <return type-id='type-id-35'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-122'/>
+ <function-decl name='bar' mangled-name='_Z3barRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3barRKSs'>
+ <parameter type-id='type-id-121' name='str' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1'/>
+ <return type-id='type-id-122'/>
+ </function-decl>
+ <var-decl name='__dso_handle' type-id='type-id-46' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
--- /dev/null
+<abi-corpus path='tests/data/test-read-dwarf/libtest24-drop-fns.so' architecture='elf-amd-x86_64'>
+ <elf-needed>
+ <dependency name='libgcc_s.so.1'/>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='_Z3barRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_Z3fooRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_ZNSt11char_traitsIcE6lengthEPKc' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_fini' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_init' type='func-type' binding='global-binding' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test24-drop-fns.cc' language='LANG_C_plus_plus'>
+ <namespace-decl name='std'>
+ <namespace-decl name='__debug'>
+ </namespace-decl>
+ <class-decl name='basic_ostream<char, std::char_traits<char> >' visibility='default' is-declaration-only='yes' id='type-id-1'/>
+ <typedef-decl name='ostream' type-id='type-id-1' filepath='/usr/include/c++/5.3.1/iosfwd' line='141' column='1' id='type-id-2'/>
+ <var-decl name='cout' type-id='type-id-2' mangled-name='_ZSt4cout' visibility='default' filepath='/usr/include/c++/5.3.1/iostream' line='61' column='1'/>
+ <class-decl name='basic_string<char, std::char_traits<char>, std::allocator<char> >' size-in-bits='64' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2510' column='1' id='type-id-3'>
+ <member-type access='private'>
+ <class-decl name='_Alloc_hider' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2670' column='1' id='type-id-4'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-5'/>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_p' type-id='type-id-6' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2675' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-8' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2519' column='1' id='type-id-7'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='allocator_type' type-id='type-id-5' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2518' column='1' id='type-id-9'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-11' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2521' column='1' id='type-id-10'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-13' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2522' column='1' id='type-id-12'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='iterator' type-id='type-id-15' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2525' column='1' id='type-id-14'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_iterator' type-id='type-id-17' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2527' column='1' id='type-id-16'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reverse_iterator' type-id='type-id-19' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2528' column='1' id='type-id-18'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reverse_iterator' type-id='type-id-21' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2529' column='1' id='type-id-20'/>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2546' column='1' id='type-id-22'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_length' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2548' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='_M_capacity' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2549' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='_M_refcount' type-id='type-id-23' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2550' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2553' column='1' id='type-id-24'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-22'/>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_max_size' type-id='type-id-25' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='494' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_terminal' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='499' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <data-member access='public' static='yes'>
+ <var-decl name='npos' type-id='type-id-25' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2683' column='1'/>
+ </data-member>
+ <data-member access='private' layout-offset-in-bits='0'>
+ <var-decl name='_M_dataplus' type-id='type-id-4' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2687' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-5'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-27'/>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='95' column='1' id='type-id-8'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='99' column='1' id='type-id-11'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-30' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='100' column='1' id='type-id-13'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='size_t' type-id='type-id-31' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/c++config.h' line='1969' column='1' id='type-id-28'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-19'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-21'/>
+ <class-decl name='char_traits<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='233' column='1' id='type-id-32'>
+ <member-type access='public'>
+ <typedef-decl name='char_type' type-id='type-id-34' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='235' column='1' id='type-id-33'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='int_type' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='236' column='1' id='type-id-35'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='string' type-id='type-id-3' filepath='/usr/include/c++/5.3.1/bits/stringfwd.h' line='74' column='1' id='type-id-37'/>
+ </namespace-decl>
+ <namespace-decl name='__gnu_cxx'>
+ <namespace-decl name='__ops'>
+ </namespace-decl>
+ <class-decl name='new_allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='58' column='1' id='type-id-27'>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='61' column='1' id='type-id-38'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='pointer' type-id='type-id-6' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='63' column='1' id='type-id-39'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_pointer' type-id='type-id-41' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='64' column='1' id='type-id-40'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='65' column='1' id='type-id-42'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-30' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='66' column='1' id='type-id-43'/>
+ </member-type>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4ERKS1_' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcED4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-36' is-artificial='yes'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <parameter type-id='type-id-43'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='allocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-38'/>
+ <parameter type-id='type-id-48'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='deallocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='max_size' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='construct' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-30'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='destroy' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE7destroyEPc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <class-decl name='__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-15'/>
+ <class-decl name='__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-17'/>
+ <class-decl name='__numeric_traits_integer<int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-49'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long unsigned int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-52'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-53' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-53' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-54'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-26' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<short int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-55'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-56' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-56' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-57'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-58' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-58' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ </namespace-decl>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-31'/>
+ <type-decl name='char' size-in-bits='8' id='type-id-34'/>
+ <pointer-type-def type-id='type-id-34' size-in-bits='64' id='type-id-6'/>
+ <qualified-type-def type-id='type-id-34' const='yes' id='type-id-26'/>
+ <pointer-type-def type-id='type-id-26' size-in-bits='64' id='type-id-41'/>
+ <reference-type-def kind='lvalue' type-id='type-id-34' size-in-bits='64' id='type-id-29'/>
+ <reference-type-def kind='lvalue' type-id='type-id-26' size-in-bits='64' id='type-id-30'/>
+ <pointer-type-def type-id='type-id-27' size-in-bits='64' id='type-id-44'/>
+ <type-decl name='void' id='type-id-45'/>
+ <qualified-type-def type-id='type-id-27' const='yes' id='type-id-59'/>
+ <reference-type-def kind='lvalue' type-id='type-id-59' size-in-bits='64' id='type-id-46'/>
+ <type-decl name='int' size-in-bits='32' id='type-id-36'/>
+ <pointer-type-def type-id='type-id-59' size-in-bits='64' id='type-id-47'/>
+ <pointer-type-def type-id='type-id-45' size-in-bits='64' id='type-id-48'/>
+ <qualified-type-def type-id='type-id-36' const='yes' id='type-id-50'/>
+ <type-decl name='bool' size-in-bits='8' id='type-id-60'/>
+ <qualified-type-def type-id='type-id-60' const='yes' id='type-id-51'/>
+ <qualified-type-def type-id='type-id-31' const='yes' id='type-id-53'/>
+ <type-decl name='short int' size-in-bits='16' id='type-id-61'/>
+ <qualified-type-def type-id='type-id-61' const='yes' id='type-id-56'/>
+ <type-decl name='long int' size-in-bits='64' id='type-id-62'/>
+ <qualified-type-def type-id='type-id-62' const='yes' id='type-id-58'/>
+ <typedef-decl name='_Atomic_word' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/atomic_word.h' line='32' column='1' id='type-id-23'/>
+ <qualified-type-def type-id='type-id-7' const='yes' id='type-id-25'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-63'/>
+ <qualified-type-def type-id='type-id-5' const='yes' id='type-id-64'/>
+ <reference-type-def kind='lvalue' type-id='type-id-64' size-in-bits='64' id='type-id-65'/>
+ <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-66'/>
+ <reference-type-def kind='lvalue' type-id='type-id-24' size-in-bits='64' id='type-id-67'/>
+ <qualified-type-def type-id='type-id-24' const='yes' id='type-id-68'/>
+ <pointer-type-def type-id='type-id-68' size-in-bits='64' id='type-id-69'/>
+ <pointer-type-def type-id='type-id-24' size-in-bits='64' id='type-id-70'/>
+ <qualified-type-def type-id='type-id-3' const='yes' id='type-id-71'/>
+ <pointer-type-def type-id='type-id-71' size-in-bits='64' id='type-id-72'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-73'/>
+ <reference-type-def kind='lvalue' type-id='type-id-71' size-in-bits='64' id='type-id-74'/>
+ <reference-type-def kind='lvalue' type-id='type-id-3' size-in-bits='64' id='type-id-75'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-76'/>
+ <typedef-decl name='wint_t' type-id='type-id-76' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='357' column='1' id='type-id-77'/>
+ <function-decl name='btowc' filepath='/usr/include/wchar.h' line='353' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-78'/>
+ <typedef-decl name='__FILE' type-id='type-id-78' filepath='/usr/include/stdio.h' line='64' column='1' id='type-id-79'/>
+ <pointer-type-def type-id='type-id-79' size-in-bits='64' id='type-id-80'/>
+ <function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <type-decl name='wchar_t' size-in-bits='32' id='type-id-81'/>
+ <pointer-type-def type-id='type-id-81' size-in-bits='64' id='type-id-82'/>
+ <function-decl name='fgetws' filepath='/usr/include/wchar.h' line='774' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='fputwc' filepath='/usr/include/wchar.h' line='759' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-81' const='yes' id='type-id-83'/>
+ <pointer-type-def type-id='type-id-83' size-in-bits='64' id='type-id-84'/>
+ <function-decl name='fputws' filepath='/usr/include/wchar.h' line='781' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwide' filepath='/usr/include/wchar.h' line='587' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwprintf' filepath='/usr/include/wchar.h' line='594' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwscanf' filepath='/usr/include/wchar.h' line='635' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='getwc' filepath='/usr/include/wchar.h' line='746' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='getwchar' filepath='/usr/include/wchar.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <typedef-decl name='size_t' type-id='type-id-31' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='216' column='1' id='type-id-85'/>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/wchar.h' line='83' column='1' id='type-id-86'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='__count' type-id='type-id-36' visibility='default' filepath='/usr/include/wchar.h' line='84' column='1'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='__mbstate_t' type-id='type-id-86' filepath='/usr/include/wchar.h' line='94' column='1' id='type-id-87'/>
+ <typedef-decl name='mbstate_t' type-id='type-id-87' filepath='/usr/include/wchar.h' line='106' column='1' id='type-id-88'/>
+ <pointer-type-def type-id='type-id-88' size-in-bits='64' id='type-id-89'/>
+ <function-decl name='mbrlen' filepath='/usr/include/wchar.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='mbrtowc' filepath='/usr/include/wchar.h' line='365' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-41'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-88' const='yes' id='type-id-90'/>
+ <pointer-type-def type-id='type-id-90' size-in-bits='64' id='type-id-91'/>
+ <function-decl name='mbsinit' filepath='/usr/include/wchar.h' line='361' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-91'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-41' size-in-bits='64' id='type-id-92'/>
+ <function-decl name='mbsrtowcs' filepath='/usr/include/wchar.h' line='408' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-92'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='putwc' filepath='/usr/include/wchar.h' line='760' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='putwchar' filepath='/usr/include/wchar.h' line='766' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='swprintf' filepath='/usr/include/wchar.h' line='604' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='swscanf' filepath='/usr/include/wchar.h' line='645' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='ungetwc' filepath='/usr/include/wchar.h' line='789' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='typedef __va_list_tag __va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='type-id-93'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='gp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='fp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='overflow_arg_area' type-id='type-id-48' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='reg_save_area' type-id='type-id-48' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-93' size-in-bits='64' id='type-id-94'/>
+ <function-decl name='vfwprintf' filepath='/usr/include/wchar.h' line='612' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vfwscanf' filepath='/usr/include/wchar.h' line='689' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vswprintf' filepath='/usr/include/wchar.h' line='625' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vswscanf' filepath='/usr/include/wchar.h' line='701' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vwprintf' filepath='/usr/include/wchar.h' line='620' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vwscanf' filepath='/usr/include/wchar.h' line='697' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcrtomb' filepath='/usr/include/wchar.h' line='370' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcscat' filepath='/usr/include/wchar.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscmp' filepath='/usr/include/wchar.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcscoll' filepath='/usr/include/wchar.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcscpy' filepath='/usr/include/wchar.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscspn' filepath='/usr/include/wchar.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' filepath='/usr/include/time.h' line='133' column='1' id='type-id-95'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='tm_sec' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='135' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='tm_min' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='136' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tm_hour' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='137' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='96'>
+ <var-decl name='tm_mday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='138' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='tm_mon' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='139' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='160'>
+ <var-decl name='tm_year' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='140' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='tm_wday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='141' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='224'>
+ <var-decl name='tm_yday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='142' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='tm_isdst' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='143' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='tm_gmtoff' type-id='type-id-62' visibility='default' filepath='/usr/include/time.h' line='146' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='tm_zone' type-id='type-id-41' visibility='default' filepath='/usr/include/time.h' line='147' column='1'/>
+ </data-member>
+ </class-decl>
+ <qualified-type-def type-id='type-id-95' const='yes' id='type-id-96'/>
+ <pointer-type-def type-id='type-id-96' size-in-bits='64' id='type-id-97'/>
+ <function-decl name='wcsftime' filepath='/usr/include/wchar.h' line='855' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcslen' filepath='/usr/include/wchar.h' line='287' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsncat' filepath='/usr/include/wchar.h' line='158' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcsncmp' filepath='/usr/include/wchar.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcsncpy' filepath='/usr/include/wchar.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-84' size-in-bits='64' id='type-id-98'/>
+ <function-decl name='wcsrtombs' filepath='/usr/include/wchar.h' line='414' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-98'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsspn' filepath='/usr/include/wchar.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <type-decl name='double' size-in-bits='64' id='type-id-99'/>
+ <pointer-type-def type-id='type-id-82' size-in-bits='64' id='type-id-100'/>
+ <function-decl name='wcstod' filepath='/usr/include/wchar.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-99'/>
+ </function-decl>
+ <type-decl name='float' size-in-bits='32' id='type-id-101'/>
+ <function-decl name='wcstof' filepath='/usr/include/wchar.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-101'/>
+ </function-decl>
+ <function-decl name='wcstok' filepath='/usr/include/wchar.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcstol' filepath='/usr/include/wchar.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-62'/>
+ </function-decl>
+ <function-decl name='wcstoul' filepath='/usr/include/wchar.h' line='473' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-31'/>
+ </function-decl>
+ <function-decl name='wcsxfrm' filepath='/usr/include/wchar.h' line='196' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wctob' filepath='/usr/include/wchar.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wmemcmp' filepath='/usr/include/wchar.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wmemcpy' filepath='/usr/include/wchar.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemmove' filepath='/usr/include/wchar.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemset' filepath='/usr/include/wchar.h' line='338' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wprintf' filepath='/usr/include/wchar.h' line='601' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wscanf' filepath='/usr/include/wchar.h' line='642' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcschr' mangled-name='wcschr' filepath='/usr/include/wchar.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcspbrk' mangled-name='wcspbrk' filepath='/usr/include/wchar.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsrchr' mangled-name='wcsrchr' filepath='/usr/include/wchar.h' line='234' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsstr' mangled-name='wcsstr' filepath='/usr/include/wchar.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wmemchr' mangled-name='wmemchr' filepath='/usr/include/wchar.h' line='316' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <type-decl name='long double' size-in-bits='128' id='type-id-102'/>
+ <function-decl name='wcstold' filepath='/usr/include/wchar.h' line='459' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-102'/>
+ </function-decl>
+ <type-decl name='long long int' size-in-bits='64' id='type-id-103'/>
+ <function-decl name='wcstoll' filepath='/usr/include/wchar.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-103'/>
+ </function-decl>
+ <type-decl name='long long unsigned int' size-in-bits='64' id='type-id-104'/>
+ <function-decl name='wcstoull' filepath='/usr/include/wchar.h' line='490' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-104'/>
+ </function-decl>
+ <namespace-decl name='__gnu_debug'>
+ </namespace-decl>
+ <function-decl name='setlocale' filepath='/usr/include/locale.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='53' column='1' id='type-id-105'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='57' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='64' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='int_curr_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='70' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='currency_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='71' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='mon_decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='72' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='mon_thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='73' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='mon_grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='74' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='512'>
+ <var-decl name='positive_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='75' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='576'>
+ <var-decl name='negative_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='76' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='640'>
+ <var-decl name='int_frac_digits' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='77' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='648'>
+ <var-decl name='frac_digits' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='78' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='656'>
+ <var-decl name='p_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='80' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='664'>
+ <var-decl name='p_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='82' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='672'>
+ <var-decl name='n_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='84' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='680'>
+ <var-decl name='n_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='86' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='688'>
+ <var-decl name='p_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='93' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='696'>
+ <var-decl name='n_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='94' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='704'>
+ <var-decl name='int_p_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='97' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='712'>
+ <var-decl name='int_p_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='99' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='720'>
+ <var-decl name='int_n_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='101' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='728'>
+ <var-decl name='int_n_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='103' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='736'>
+ <var-decl name='int_p_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='110' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='744'>
+ <var-decl name='int_n_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='111' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-105' size-in-bits='64' id='type-id-106'/>
+ <function-decl name='localeconv' filepath='/usr/include/locale.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-106'/>
+ </function-decl>
+ <typedef-decl name='wctype_t' type-id='type-id-31' filepath='/usr/include/wctype.h' line='52' column='1' id='type-id-107'/>
+ <function-decl name='iswctype' filepath='/usr/include/wctype.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-107'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <typedef-decl name='__int32_t' type-id='type-id-36' filepath='/usr/include/bits/types.h' line='40' column='1' id='type-id-108'/>
+ <qualified-type-def type-id='type-id-108' const='yes' id='type-id-109'/>
+ <pointer-type-def type-id='type-id-109' size-in-bits='64' id='type-id-110'/>
+ <typedef-decl name='wctrans_t' type-id='type-id-110' filepath='/usr/include/wctype.h' line='186' column='1' id='type-id-111'/>
+ <function-decl name='towctrans' filepath='/usr/include/wctype.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-111'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='wctrans' filepath='/usr/include/wctype.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-111'/>
+ </function-decl>
+ <function-decl name='wctype' filepath='/usr/include/wctype.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-107'/>
+ </function-decl>
+ <reference-type-def kind='lvalue' type-id='type-id-33' size-in-bits='64' id='type-id-112'/>
+ <qualified-type-def type-id='type-id-33' const='yes' id='type-id-113'/>
+ <reference-type-def kind='lvalue' type-id='type-id-113' size-in-bits='64' id='type-id-114'/>
+ <pointer-type-def type-id='type-id-113' size-in-bits='64' id='type-id-115'/>
+ <pointer-type-def type-id='type-id-33' size-in-bits='64' id='type-id-116'/>
+ <qualified-type-def type-id='type-id-35' const='yes' id='type-id-117'/>
+ <reference-type-def kind='lvalue' type-id='type-id-117' size-in-bits='64' id='type-id-118'/>
+ <qualified-type-def type-id='type-id-37' const='yes' id='type-id-119'/>
+ <reference-type-def kind='lvalue' type-id='type-id-119' size-in-bits='64' id='type-id-120'/>
+ <qualified-type-def type-id='type-id-120' id='type-id-121'/>
+ <function-decl name='foo' mangled-name='_Z3fooRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3fooRKSs'>
+ <parameter type-id='type-id-121' name='s' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1'/>
+ <return type-id='type-id-37'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-122'/>
+ <function-decl name='bar' mangled-name='_Z3barRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3barRKSs'>
+ <parameter type-id='type-id-121' name='str' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1'/>
+ <return type-id='type-id-122'/>
+ </function-decl>
+ <var-decl name='__dso_handle' type-id='type-id-48' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
--- /dev/null
+<abi-corpus path='tests/data/test-read-dwarf/libtest24-drop-fns.so'>
+ <elf-needed>
+ <dependency name='libgcc_s.so.1'/>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='_Z3barRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_Z3fooRKSs' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_ZNSt11char_traitsIcE6lengthEPKc' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_EPKS3_RKS6_' type='func-type' binding='weak-binding' is-defined='yes'/>
+ <elf-symbol name='_fini' type='func-type' binding='global-binding' is-defined='yes'/>
+ <elf-symbol name='_init' type='func-type' binding='global-binding' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr version='1.0' address-size='64' path='test24-drop-fns.cc' language='LANG_C_plus_plus'>
+ <namespace-decl name='std'>
+ <namespace-decl name='__debug'>
+ </namespace-decl>
+ <class-decl name='basic_ostream<char, std::char_traits<char> >' visibility='default' is-declaration-only='yes' id='type-id-1'/>
+ <typedef-decl name='ostream' type-id='type-id-1' filepath='/usr/include/c++/5.3.1/iosfwd' line='141' column='1' id='type-id-2'/>
+ <var-decl name='cout' type-id='type-id-2' mangled-name='_ZSt4cout' visibility='default' filepath='/usr/include/c++/5.3.1/iostream' line='61' column='1'/>
+ <class-decl name='basic_string<char, std::char_traits<char>, std::allocator<char> >' size-in-bits='64' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2510' column='1' id='type-id-3'>
+ <member-type access='private'>
+ <class-decl name='_Alloc_hider' size-in-bits='64' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2670' column='1' id='type-id-4'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-5'/>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_p' type-id='type-id-6' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2675' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-8' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2519' column='1' id='type-id-7'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='allocator_type' type-id='type-id-5' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2518' column='1' id='type-id-9'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-11' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2521' column='1' id='type-id-10'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-13' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2522' column='1' id='type-id-12'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='iterator' type-id='type-id-15' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2525' column='1' id='type-id-14'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_iterator' type-id='type-id-17' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2527' column='1' id='type-id-16'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reverse_iterator' type-id='type-id-19' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2528' column='1' id='type-id-18'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reverse_iterator' type-id='type-id-21' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2529' column='1' id='type-id-20'/>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2546' column='1' id='type-id-22'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='_M_length' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2548' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='_M_capacity' type-id='type-id-7' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2549' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='_M_refcount' type-id='type-id-23' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2550' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <member-type access='private'>
+ <class-decl name='_Rep' size-in-bits='192' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2553' column='1' id='type-id-24'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-22'/>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_max_size' type-id='type-id-25' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='494' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='_S_terminal' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.tcc' line='499' column='1'/>
+ </data-member>
+ </class-decl>
+ </member-type>
+ <data-member access='public' static='yes'>
+ <var-decl name='npos' type-id='type-id-25' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2683' column='1'/>
+ </data-member>
+ <data-member access='private' layout-offset-in-bits='0'>
+ <var-decl name='_M_dataplus' type-id='type-id-4' visibility='default' filepath='/usr/include/c++/5.3.1/bits/basic_string.h' line='2687' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='92' column='1' id='type-id-5'>
+ <base-class access='public' layout-offset-in-bits='0' type-id='type-id-27'/>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='95' column='1' id='type-id-8'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='99' column='1' id='type-id-11'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-30' filepath='/usr/include/c++/5.3.1/bits/allocator.h' line='100' column='1' id='type-id-13'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='size_t' type-id='type-id-31' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/c++config.h' line='1969' column='1' id='type-id-28'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-19'/>
+ <class-decl name='reverse_iterator<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' visibility='default' is-declaration-only='yes' id='type-id-21'/>
+ <class-decl name='char_traits<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='233' column='1' id='type-id-32'>
+ <member-type access='public'>
+ <typedef-decl name='char_type' type-id='type-id-34' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='235' column='1' id='type-id-33'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='int_type' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/bits/char_traits.h' line='236' column='1' id='type-id-35'/>
+ </member-type>
+ </class-decl>
+ <typedef-decl name='string' type-id='type-id-3' filepath='/usr/include/c++/5.3.1/bits/stringfwd.h' line='74' column='1' id='type-id-37'/>
+ </namespace-decl>
+ <namespace-decl name='__gnu_cxx'>
+ <namespace-decl name='__ops'>
+ </namespace-decl>
+ <class-decl name='new_allocator<char>' size-in-bits='8' visibility='default' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='58' column='1' id='type-id-27'>
+ <member-type access='public'>
+ <typedef-decl name='size_type' type-id='type-id-28' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='61' column='1' id='type-id-38'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='pointer' type-id='type-id-6' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='63' column='1' id='type-id-39'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_pointer' type-id='type-id-41' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='64' column='1' id='type-id-40'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='reference' type-id='type-id-29' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='65' column='1' id='type-id-42'/>
+ </member-type>
+ <member-type access='public'>
+ <typedef-decl name='const_reference' type-id='type-id-30' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='66' column='1' id='type-id-43'/>
+ </member-type>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='79' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcEC4ERKS1_' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-46'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public' destructor='yes'>
+ <function-decl name='~new_allocator' mangled-name='_ZN9__gnu_cxx13new_allocatorIcED4Ev' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='86' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-36' is-artificial='yes'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='89' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <parameter type-id='type-id-42'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='address' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='93' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <parameter type-id='type-id-43'/>
+ <return type-id='type-id-40'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='allocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='99' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-38'/>
+ <parameter type-id='type-id-48'/>
+ <return type-id='type-id-39'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='deallocate' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcm' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='109' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-38'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='max_size' mangled-name='_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='113' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-47' is-artificial='yes'/>
+ <return type-id='type-id-38'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='construct' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='129' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <parameter type-id='type-id-30'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ <member-function access='public'>
+ <function-decl name='destroy' mangled-name='_ZN9__gnu_cxx13new_allocatorIcE7destroyEPc' filepath='/usr/include/c++/5.3.1/ext/new_allocator.h' line='133' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-44' is-artificial='yes'/>
+ <parameter type-id='type-id-39'/>
+ <return type-id='type-id-45'/>
+ </function-decl>
+ </member-function>
+ </class-decl>
+ <class-decl name='__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-15'/>
+ <class-decl name='__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' visibility='default' is-declaration-only='yes' id='type-id-17'/>
+ <class-decl name='__numeric_traits_integer<int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-49'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIiE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long unsigned int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-52'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-53' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-53' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerImE8__digitsE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<char>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-54'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-26' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-26' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIcE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<short int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-55'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-56' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-56' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIsE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='__numeric_traits_integer<long int>' size-in-bits='8' is-struct='yes' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='55' column='1' id='type-id-57'>
+ <data-member access='public' static='yes'>
+ <var-decl name='__min' type-id='type-id-58' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__minE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__max' type-id='type-id-58' mangled-name='_ZN9__gnu_cxx24__numeric_traits_integerIlE5__maxE' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='59' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__is_signed' type-id='type-id-51' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='63' column='1'/>
+ </data-member>
+ <data-member access='public' static='yes'>
+ <var-decl name='__digits' type-id='type-id-50' visibility='default' filepath='/usr/include/c++/5.3.1/ext/numeric_traits.h' line='64' column='1'/>
+ </data-member>
+ </class-decl>
+ </namespace-decl>
+ <type-decl name='unsigned long int' size-in-bits='64' id='type-id-31'/>
+ <type-decl name='char' size-in-bits='8' id='type-id-34'/>
+ <pointer-type-def type-id='type-id-34' size-in-bits='64' id='type-id-6'/>
+ <qualified-type-def type-id='type-id-34' const='yes' id='type-id-26'/>
+ <pointer-type-def type-id='type-id-26' size-in-bits='64' id='type-id-41'/>
+ <reference-type-def kind='lvalue' type-id='type-id-34' size-in-bits='64' id='type-id-29'/>
+ <reference-type-def kind='lvalue' type-id='type-id-26' size-in-bits='64' id='type-id-30'/>
+ <pointer-type-def type-id='type-id-27' size-in-bits='64' id='type-id-44'/>
+ <type-decl name='void' id='type-id-45'/>
+ <qualified-type-def type-id='type-id-27' const='yes' id='type-id-59'/>
+ <reference-type-def kind='lvalue' type-id='type-id-59' size-in-bits='64' id='type-id-46'/>
+ <type-decl name='int' size-in-bits='32' id='type-id-36'/>
+ <pointer-type-def type-id='type-id-59' size-in-bits='64' id='type-id-47'/>
+ <pointer-type-def type-id='type-id-45' size-in-bits='64' id='type-id-48'/>
+ <qualified-type-def type-id='type-id-36' const='yes' id='type-id-50'/>
+ <type-decl name='bool' size-in-bits='8' id='type-id-60'/>
+ <qualified-type-def type-id='type-id-60' const='yes' id='type-id-51'/>
+ <qualified-type-def type-id='type-id-31' const='yes' id='type-id-53'/>
+ <type-decl name='short int' size-in-bits='16' id='type-id-61'/>
+ <qualified-type-def type-id='type-id-61' const='yes' id='type-id-56'/>
+ <type-decl name='long int' size-in-bits='64' id='type-id-62'/>
+ <qualified-type-def type-id='type-id-62' const='yes' id='type-id-58'/>
+ <typedef-decl name='_Atomic_word' type-id='type-id-36' filepath='/usr/include/c++/5.3.1/x86_64-redhat-linux/bits/atomic_word.h' line='32' column='1' id='type-id-23'/>
+ <qualified-type-def type-id='type-id-7' const='yes' id='type-id-25'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-63'/>
+ <qualified-type-def type-id='type-id-5' const='yes' id='type-id-64'/>
+ <reference-type-def kind='lvalue' type-id='type-id-64' size-in-bits='64' id='type-id-65'/>
+ <pointer-type-def type-id='type-id-4' size-in-bits='64' id='type-id-66'/>
+ <reference-type-def kind='lvalue' type-id='type-id-24' size-in-bits='64' id='type-id-67'/>
+ <qualified-type-def type-id='type-id-24' const='yes' id='type-id-68'/>
+ <pointer-type-def type-id='type-id-68' size-in-bits='64' id='type-id-69'/>
+ <pointer-type-def type-id='type-id-24' size-in-bits='64' id='type-id-70'/>
+ <qualified-type-def type-id='type-id-3' const='yes' id='type-id-71'/>
+ <pointer-type-def type-id='type-id-71' size-in-bits='64' id='type-id-72'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-73'/>
+ <reference-type-def kind='lvalue' type-id='type-id-71' size-in-bits='64' id='type-id-74'/>
+ <reference-type-def kind='lvalue' type-id='type-id-3' size-in-bits='64' id='type-id-75'/>
+ <type-decl name='unsigned int' size-in-bits='32' id='type-id-76'/>
+ <typedef-decl name='wint_t' type-id='type-id-76' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='357' column='1' id='type-id-77'/>
+ <function-decl name='btowc' filepath='/usr/include/wchar.h' line='353' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='_IO_FILE' is-struct='yes' visibility='default' is-declaration-only='yes' id='type-id-78'/>
+ <typedef-decl name='__FILE' type-id='type-id-78' filepath='/usr/include/stdio.h' line='64' column='1' id='type-id-79'/>
+ <pointer-type-def type-id='type-id-79' size-in-bits='64' id='type-id-80'/>
+ <function-decl name='fgetwc' filepath='/usr/include/wchar.h' line='745' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <type-decl name='wchar_t' size-in-bits='32' id='type-id-81'/>
+ <pointer-type-def type-id='type-id-81' size-in-bits='64' id='type-id-82'/>
+ <function-decl name='fgetws' filepath='/usr/include/wchar.h' line='774' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='fputwc' filepath='/usr/include/wchar.h' line='759' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-81' const='yes' id='type-id-83'/>
+ <pointer-type-def type-id='type-id-83' size-in-bits='64' id='type-id-84'/>
+ <function-decl name='fputws' filepath='/usr/include/wchar.h' line='781' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwide' filepath='/usr/include/wchar.h' line='587' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwprintf' filepath='/usr/include/wchar.h' line='594' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='fwscanf' filepath='/usr/include/wchar.h' line='635' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='getwc' filepath='/usr/include/wchar.h' line='746' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='getwchar' filepath='/usr/include/wchar.h' line='752' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <typedef-decl name='size_t' type-id='type-id-31' filepath='/usr/lib/gcc/x86_64-redhat-linux/5.3.1/include/stddef.h' line='216' column='1' id='type-id-85'/>
+ <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/usr/include/wchar.h' line='83' column='1' id='type-id-86'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='__count' type-id='type-id-36' visibility='default' filepath='/usr/include/wchar.h' line='84' column='1'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='__mbstate_t' type-id='type-id-86' filepath='/usr/include/wchar.h' line='94' column='1' id='type-id-87'/>
+ <typedef-decl name='mbstate_t' type-id='type-id-87' filepath='/usr/include/wchar.h' line='106' column='1' id='type-id-88'/>
+ <pointer-type-def type-id='type-id-88' size-in-bits='64' id='type-id-89'/>
+ <function-decl name='mbrlen' filepath='/usr/include/wchar.h' line='376' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='mbrtowc' filepath='/usr/include/wchar.h' line='365' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-41'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <qualified-type-def type-id='type-id-88' const='yes' id='type-id-90'/>
+ <pointer-type-def type-id='type-id-90' size-in-bits='64' id='type-id-91'/>
+ <function-decl name='mbsinit' filepath='/usr/include/wchar.h' line='361' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-91'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-41' size-in-bits='64' id='type-id-92'/>
+ <function-decl name='mbsrtowcs' filepath='/usr/include/wchar.h' line='408' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-92'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='putwc' filepath='/usr/include/wchar.h' line='760' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='putwchar' filepath='/usr/include/wchar.h' line='766' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='swprintf' filepath='/usr/include/wchar.h' line='604' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='swscanf' filepath='/usr/include/wchar.h' line='645' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='ungetwc' filepath='/usr/include/wchar.h' line='789' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-80'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <class-decl name='typedef __va_list_tag __va_list_tag' size-in-bits='192' is-struct='yes' visibility='default' id='type-id-93'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='gp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='fp_offset' type-id='type-id-76' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='overflow_arg_area' type-id='type-id-48' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='reg_save_area' type-id='type-id-48' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-93' size-in-bits='64' id='type-id-94'/>
+ <function-decl name='vfwprintf' filepath='/usr/include/wchar.h' line='612' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vfwscanf' filepath='/usr/include/wchar.h' line='689' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-80'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vswprintf' filepath='/usr/include/wchar.h' line='625' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vswscanf' filepath='/usr/include/wchar.h' line='701' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vwprintf' filepath='/usr/include/wchar.h' line='620' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='vwscanf' filepath='/usr/include/wchar.h' line='697' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-94'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcrtomb' filepath='/usr/include/wchar.h' line='370' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcscat' filepath='/usr/include/wchar.h' line='155' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscmp' filepath='/usr/include/wchar.h' line='163' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcscoll' filepath='/usr/include/wchar.h' line='192' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcscpy' filepath='/usr/include/wchar.h' line='147' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcscspn' filepath='/usr/include/wchar.h' line='252' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <class-decl name='tm' size-in-bits='448' is-struct='yes' visibility='default' filepath='/usr/include/time.h' line='133' column='1' id='type-id-95'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='tm_sec' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='135' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='32'>
+ <var-decl name='tm_min' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='136' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='tm_hour' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='137' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='96'>
+ <var-decl name='tm_mday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='138' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='tm_mon' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='139' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='160'>
+ <var-decl name='tm_year' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='140' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='tm_wday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='141' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='224'>
+ <var-decl name='tm_yday' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='142' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='tm_isdst' type-id='type-id-36' visibility='default' filepath='/usr/include/time.h' line='143' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='tm_gmtoff' type-id='type-id-62' visibility='default' filepath='/usr/include/time.h' line='146' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='tm_zone' type-id='type-id-41' visibility='default' filepath='/usr/include/time.h' line='147' column='1'/>
+ </data-member>
+ </class-decl>
+ <qualified-type-def type-id='type-id-95' const='yes' id='type-id-96'/>
+ <pointer-type-def type-id='type-id-96' size-in-bits='64' id='type-id-97'/>
+ <function-decl name='wcsftime' filepath='/usr/include/wchar.h' line='855' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-97'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcslen' filepath='/usr/include/wchar.h' line='287' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsncat' filepath='/usr/include/wchar.h' line='158' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcsncmp' filepath='/usr/include/wchar.h' line='166' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcsncpy' filepath='/usr/include/wchar.h' line='150' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-84' size-in-bits='64' id='type-id-98'/>
+ <function-decl name='wcsrtombs' filepath='/usr/include/wchar.h' line='414' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-6'/>
+ <parameter type-id='type-id-98'/>
+ <parameter type-id='type-id-85'/>
+ <parameter type-id='type-id-89'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wcsspn' filepath='/usr/include/wchar.h' line='256' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <type-decl name='double' size-in-bits='64' id='type-id-99'/>
+ <pointer-type-def type-id='type-id-82' size-in-bits='64' id='type-id-100'/>
+ <function-decl name='wcstod' filepath='/usr/include/wchar.h' line='450' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-99'/>
+ </function-decl>
+ <type-decl name='float' size-in-bits='32' id='type-id-101'/>
+ <function-decl name='wcstof' filepath='/usr/include/wchar.h' line='457' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-101'/>
+ </function-decl>
+ <function-decl name='wcstok' filepath='/usr/include/wchar.h' line='282' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wcstol' filepath='/usr/include/wchar.h' line='468' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-62'/>
+ </function-decl>
+ <function-decl name='wcstoul' filepath='/usr/include/wchar.h' line='473' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-31'/>
+ </function-decl>
+ <function-decl name='wcsxfrm' filepath='/usr/include/wchar.h' line='196' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-85'/>
+ </function-decl>
+ <function-decl name='wctob' filepath='/usr/include/wchar.h' line='357' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wmemcmp' filepath='/usr/include/wchar.h' line='325' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wmemcpy' filepath='/usr/include/wchar.h' line='329' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemmove' filepath='/usr/include/wchar.h' line='334' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wmemset' filepath='/usr/include/wchar.h' line='338' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-82'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-82'/>
+ </function-decl>
+ <function-decl name='wprintf' filepath='/usr/include/wchar.h' line='601' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wscanf' filepath='/usr/include/wchar.h' line='642' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter is-variadic='yes'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <function-decl name='wcschr' mangled-name='wcschr' filepath='/usr/include/wchar.h' line='224' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcspbrk' mangled-name='wcspbrk' filepath='/usr/include/wchar.h' line='262' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsrchr' mangled-name='wcsrchr' filepath='/usr/include/wchar.h' line='234' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wcsstr' mangled-name='wcsstr' filepath='/usr/include/wchar.h' line='273' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-84'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <function-decl name='wmemchr' mangled-name='wmemchr' filepath='/usr/include/wchar.h' line='316' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-81'/>
+ <parameter type-id='type-id-85'/>
+ <return type-id='type-id-84'/>
+ </function-decl>
+ <type-decl name='long double' size-in-bits='128' id='type-id-102'/>
+ <function-decl name='wcstold' filepath='/usr/include/wchar.h' line='459' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <return type-id='type-id-102'/>
+ </function-decl>
+ <type-decl name='long long int' size-in-bits='64' id='type-id-103'/>
+ <function-decl name='wcstoll' filepath='/usr/include/wchar.h' line='483' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-103'/>
+ </function-decl>
+ <type-decl name='long long unsigned int' size-in-bits='64' id='type-id-104'/>
+ <function-decl name='wcstoull' filepath='/usr/include/wchar.h' line='490' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-84'/>
+ <parameter type-id='type-id-100'/>
+ <parameter type-id='type-id-36'/>
+ <return type-id='type-id-104'/>
+ </function-decl>
+ <namespace-decl name='__gnu_debug'>
+ </namespace-decl>
+ <function-decl name='setlocale' filepath='/usr/include/locale.h' line='124' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-36'/>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-6'/>
+ </function-decl>
+ <class-decl name='lconv' size-in-bits='768' is-struct='yes' visibility='default' filepath='/usr/include/locale.h' line='53' column='1' id='type-id-105'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='57' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='58' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='64' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='int_curr_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='70' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='currency_symbol' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='71' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='320'>
+ <var-decl name='mon_decimal_point' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='72' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='384'>
+ <var-decl name='mon_thousands_sep' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='73' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='mon_grouping' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='74' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='512'>
+ <var-decl name='positive_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='75' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='576'>
+ <var-decl name='negative_sign' type-id='type-id-6' visibility='default' filepath='/usr/include/locale.h' line='76' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='640'>
+ <var-decl name='int_frac_digits' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='77' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='648'>
+ <var-decl name='frac_digits' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='78' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='656'>
+ <var-decl name='p_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='80' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='664'>
+ <var-decl name='p_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='82' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='672'>
+ <var-decl name='n_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='84' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='680'>
+ <var-decl name='n_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='86' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='688'>
+ <var-decl name='p_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='93' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='696'>
+ <var-decl name='n_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='94' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='704'>
+ <var-decl name='int_p_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='97' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='712'>
+ <var-decl name='int_p_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='99' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='720'>
+ <var-decl name='int_n_cs_precedes' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='101' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='728'>
+ <var-decl name='int_n_sep_by_space' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='103' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='736'>
+ <var-decl name='int_p_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='110' column='1'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='744'>
+ <var-decl name='int_n_sign_posn' type-id='type-id-34' visibility='default' filepath='/usr/include/locale.h' line='111' column='1'/>
+ </data-member>
+ </class-decl>
+ <pointer-type-def type-id='type-id-105' size-in-bits='64' id='type-id-106'/>
+ <function-decl name='localeconv' filepath='/usr/include/locale.h' line='127' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <return type-id='type-id-106'/>
+ </function-decl>
+ <typedef-decl name='wctype_t' type-id='type-id-31' filepath='/usr/include/wctype.h' line='52' column='1' id='type-id-107'/>
+ <function-decl name='iswctype' filepath='/usr/include/wctype.h' line='175' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-107'/>
+ <return type-id='type-id-36'/>
+ </function-decl>
+ <typedef-decl name='__int32_t' type-id='type-id-36' filepath='/usr/include/bits/types.h' line='40' column='1' id='type-id-108'/>
+ <qualified-type-def type-id='type-id-108' const='yes' id='type-id-109'/>
+ <pointer-type-def type-id='type-id-109' size-in-bits='64' id='type-id-110'/>
+ <typedef-decl name='wctrans_t' type-id='type-id-110' filepath='/usr/include/wctype.h' line='186' column='1' id='type-id-111'/>
+ <function-decl name='towctrans' filepath='/usr/include/wctype.h' line='221' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-77'/>
+ <parameter type-id='type-id-111'/>
+ <return type-id='type-id-77'/>
+ </function-decl>
+ <function-decl name='wctrans' filepath='/usr/include/wctype.h' line='218' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-111'/>
+ </function-decl>
+ <function-decl name='wctype' filepath='/usr/include/wctype.h' line='171' column='1' visibility='default' binding='global' size-in-bits='64'>
+ <parameter type-id='type-id-41'/>
+ <return type-id='type-id-107'/>
+ </function-decl>
+ <reference-type-def kind='lvalue' type-id='type-id-33' size-in-bits='64' id='type-id-112'/>
+ <qualified-type-def type-id='type-id-33' const='yes' id='type-id-113'/>
+ <reference-type-def kind='lvalue' type-id='type-id-113' size-in-bits='64' id='type-id-114'/>
+ <pointer-type-def type-id='type-id-113' size-in-bits='64' id='type-id-115'/>
+ <pointer-type-def type-id='type-id-33' size-in-bits='64' id='type-id-116'/>
+ <qualified-type-def type-id='type-id-35' const='yes' id='type-id-117'/>
+ <reference-type-def kind='lvalue' type-id='type-id-117' size-in-bits='64' id='type-id-118'/>
+ <qualified-type-def type-id='type-id-37' const='yes' id='type-id-119'/>
+ <reference-type-def kind='lvalue' type-id='type-id-119' size-in-bits='64' id='type-id-120'/>
+ <qualified-type-def type-id='type-id-120' id='type-id-121'/>
+ <function-decl name='foo' mangled-name='_Z3fooRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3fooRKSs'>
+ <parameter type-id='type-id-121' name='s' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='14' column='1'/>
+ <return type-id='type-id-37'/>
+ </function-decl>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-122'/>
+ <function-decl name='bar' mangled-name='_Z3barRKSs' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_Z3barRKSs'>
+ <parameter type-id='type-id-121' name='str' filepath='/home/dodji/git/libabigail.git/suppr/tests/data/test-read-dwarf/test24-drop-fns.cc' line='21' column='1'/>
+ <return type-id='type-id-122'/>
+ </function-decl>
+ <var-decl name='__dso_handle' type-id='type-id-48' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
"data/test-diff-suppr/test30-report-1.txt",
"output/test-diff-suppr/test30-report-1.txt"
},
+ {
+ "data/test-diff-suppr/libtest31-v0.so",
+ "data/test-diff-suppr/libtest31-v1.so",
+ "",
+ "",
+ "data/test-diff-suppr/libtest31.suppr",
+ "--no-default-suppression --no-show-locs --no-redundant",
+ "data/test-diff-suppr/test31-report-0.txt",
+ "output/test-diff-suppr/test31-report-0.txt"
+ },
+ {
+ "data/test-diff-suppr/libtest31-v0.so",
+ "data/test-diff-suppr/libtest31-v1.so",
+ "",
+ "",
+ "",
+ "--no-default-suppression --no-show-locs --no-redundant",
+ "data/test-diff-suppr/test31-report-1.txt",
+ "output/test-diff-suppr/test31-report-1.txt"
+ },
+ {
+ "data/test-diff-suppr/libtest32-v0.so",
+ "data/test-diff-suppr/libtest32-v1.so",
+ "",
+ "",
+ "",
+ "--no-default-suppression --no-show-locs --no-redundant",
+ "data/test-diff-suppr/test32-report-0.txt",
+ "output/test-diff-suppr/test32-report-0.txt"
+ },
+ {
+ "data/test-diff-suppr/libtest32-v0.so",
+ "data/test-diff-suppr/libtest32-v1.so",
+ "",
+ "",
+ "data/test-diff-suppr/libtest32-0.suppr",
+ "--no-default-suppression --no-show-locs --no-redundant",
+ "data/test-diff-suppr/test32-report-1.txt",
+ "output/test-diff-suppr/test32-report-1.txt"
+ },
// This should be the last entry
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
};
if (s->headers_dir1 && strcmp(s->headers_dir1, ""))
headers_dir1 = s->headers_dir1;
+ else
+ headers_dir1.clear();
if (s->headers_dir2 && strcmp(s->headers_dir2, ""))
headers_dir2 = s->headers_dir2;
+ else
+ headers_dir2.clear();
if (!ensure_parent_dir_created(out_diff_report_path))
{
using std::cerr;
using abigail::tests::get_build_dir;
using abigail::dwarf_reader::read_corpus_from_elf;
+using abigail::dwarf_reader::read_context;
+using abigail::dwarf_reader::read_context_sptr;
+using abigail::dwarf_reader::create_read_context;
/// This is an aggregate that specifies where a test shall get its
/// input from, and where it shall write its ouput to.
struct InOutSpec
{
const char* in_elf_path;
+ const char* in_suppr_spec_path;
const char* in_abi_path;
const char* out_abi_path;
};// end struct InOutSpec
{
{
"data/test-read-dwarf/test0",
+ "",
"data/test-read-dwarf/test0.abi",
"output/test-read-dwarf/test0.abi"
},
{
"data/test-read-dwarf/test1",
+ "",
"data/test-read-dwarf/test1.abi",
"output/test-read-dwarf/test1.abi"
},
{
"data/test-read-dwarf/test2.so",
+ "",
"data/test-read-dwarf/test2.so.abi",
"output/test-read-dwarf/test2.so.abi"
},
{
"data/test-read-dwarf/test3.so",
+ "",
"data/test-read-dwarf/test3.so.abi",
"output/test-read-dwarf/test3.so.abi"
},
{
"data/test-read-dwarf/test4.so",
+ "",
"data/test-read-dwarf/test4.so.abi",
"output/test-read-dwarf/test4.so.abi"
},
{
"data/test-read-dwarf/test5.o",
+ "",
"data/test-read-dwarf/test5.o.abi",
"output/test-read-dwarf/test5.o.abi"
},
{
"data/test-read-dwarf/test6.so",
+ "",
"data/test-read-dwarf/test6.so.abi",
"output/test-read-dwarf/test6.so.abi"
},
{
"data/test-read-dwarf/test7.so",
+ "",
"data/test-read-dwarf/test7.so.abi",
"output/test-read-dwarf/test7.so.abi"
},
{
"data/test-read-dwarf/test8-qualified-this-pointer.so",
+ "",
"data/test-read-dwarf/test8-qualified-this-pointer.so.abi",
"output/test-read-dwarf/test8-qualified-this-pointer.so.abi"
},
{
"data/test-read-dwarf/test9-pr18818-clang.so",
+ "",
"data/test-read-dwarf/test9-pr18818-clang.so.abi",
- "output/test-read-dwarf/test9-pr18818-clang.so.abi",
+ "output/test-read-dwarf/test9-pr18818-clang.so.abi"
},
{
"data/test-read-dwarf/test10-pr18818-gcc.so",
+ "",
"data/test-read-dwarf/test10-pr18818-gcc.so.abi",
- "output/test-read-dwarf/test10-pr18818-gcc.so.abi",
+ "output/test-read-dwarf/test10-pr18818-gcc.so.abi"
},
{
"data/test-read-dwarf/test11-pr18828.so",
+ "",
"data/test-read-dwarf/test11-pr18828.so.abi",
"output/test-read-dwarf/test11-pr18828.so.abi",
},
{
"data/test-read-dwarf/test12-pr18844.so",
+ "",
"data/test-read-dwarf/test12-pr18844.so.abi",
"output/test-read-dwarf/test12-pr18844.so.abi",
},
{
"data/test-read-dwarf/test13-pr18894.so",
+ "",
"data/test-read-dwarf/test13-pr18894.so.abi",
"output/test-read-dwarf/test13-pr18894.so.abi",
},
{
"data/test-read-dwarf/test14-pr18893.so",
+ "",
"data/test-read-dwarf/test14-pr18893.so.abi",
"output/test-read-dwarf/test14-pr18893.so.abi",
},
{
"data/test-read-dwarf/test15-pr18892.so",
+ "",
"data/test-read-dwarf/test15-pr18892.so.abi",
"output/test-read-dwarf/test15-pr18892.so.abi",
},
{
"data/test-read-dwarf/test16-pr18904.so",
+ "",
"data/test-read-dwarf/test16-pr18904.so.abi",
"output/test-read-dwarf/test16-pr18904.so.abi",
},
{
"data/test-read-dwarf/test17-pr19027.so",
+ "",
"data/test-read-dwarf/test17-pr19027.so.abi",
"output/test-read-dwarf/test17-pr19027.so.abi",
},
{
"data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so",
+ "",
"data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi",
"output/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi",
},
{
"data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so",
+ "",
"data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi",
"output/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi",
},
{
"data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so",
+ "",
"data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi",
"output/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi",
},
{
"data/test-read-dwarf/test21-pr19092.so",
+ "",
"data/test-read-dwarf/test21-pr19092.so.abi",
"output/test-read-dwarf/test21-pr19092.so.abi",
},
{
"data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so",
+ "",
"data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi",
"output/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi",
},
{
"data/test-read-dwarf/libtest23.so",
+ "",
"data/test-read-dwarf/libtest23.so.abi",
"output/test-read-dwarf/libtest23.so.abi",
},
+ {
+ "data/test-read-dwarf/libtest24-drop-fns.so",
+ "data/test-read-dwarf/test24-drop-fns-0.suppr",
+ "data/test-read-dwarf/libtest24-drop-fns.so.abi",
+ "output/test-read-dwarf/libtest24-drop-fns.so.abi",
+ },
+ {
+ "data/test-read-dwarf/libtest24-drop-fns.so",
+ "",
+ "data/test-read-dwarf/libtest24-drop-fns-2.so.abi",
+ "output/test-read-dwarf/libtest24-drop-fns-2.so.abi",
+ },
// This should be the last entry.
- {NULL, NULL, NULL}
+ {NULL, NULL, NULL, NULL}
};
// The global pointer to the testsuite paths.
const string in_elf_base = string(abigail::tests::get_src_dir()) + "/tests/";
const string in_abi_base = in_elf_base;
+using abigail::suppr::suppression_sptr;
+using abigail::suppr::suppressions_type;
+using abigail::suppr::read_suppressions;
+
+/// Set the suppression specification to use when reading the ELF binary.
+///
+/// @param read_ctxt the context used to read the ELF binary.
+///
+/// @param path the path to the suppression specification to read.
+static void
+set_suppressions(read_context& read_ctxt, const string& path)
+{
+ suppressions_type supprs;
+ read_suppressions(path, supprs);
+ add_read_context_suppressions(read_ctxt, supprs);
+}
+
+/// Read the current entry of the global in_out_specs variable and
+/// according to the data it contains, read an ELF binary (possibly
+/// taking its accompanying suppression specification into account),
+/// serialize its ABI into the .abi format, compare that .abi against
+/// a reference one using GNU diff.
+///
+/// Also run abidw --abidiff against the ELF binary specified by the
+/// current entry of in_out_specs.
+///
+/// Note that the current entry of in_out_specs is the one pointed to
+/// by the iospec pointer. This function increments that pointer
+/// after each invocation.
void
handle_in_out_spec(void)
{
- string in_elf_path, in_abi_path, out_abi_path;
+ string in_elf_path, in_abi_path, in_suppr_spec_path, out_abi_path;
abigail::ir::environment_sptr env;
InOutSpec *s;
if (!s)
pthread_exit(NULL);
in_elf_path = in_elf_base + s->in_elf_path;
+ if (s->in_suppr_spec_path)
+ in_suppr_spec_path = in_elf_base + s->in_suppr_spec_path;
+ else
+ in_suppr_spec_path.clear();
+
env.reset(new abigail::ir::environment);
abigail::dwarf_reader::status status =
abigail::dwarf_reader::STATUS_UNKNOWN;
- abigail::corpus_sptr corp =
- read_corpus_from_elf(in_elf_path,
- /*debug_info_root_path=*/0,
- env.get(),
- /*load_all_types=*/false,
- status);
+ read_context_sptr ctxt = create_read_context(in_elf_path,
+ /*debug_info_root_path=*/0,
+ env.get());
+ assert(ctxt);
+ if (!in_suppr_spec_path.empty())
+ set_suppressions(*ctxt, in_suppr_spec_path);
+
+ abigail::corpus_sptr corp = read_corpus_from_elf(*ctxt, status);
if (!corp)
{
cerr << "failed to read " << in_elf_path << "\n";
#include <fstream>
#include <iostream>
#include <cstdlib>
+#include <cstring>
#include "abg-ir.h"
#include "abg-reader.h"
#include "abg-writer.h"
struct InOutSpec
{
const char* in_path;
+ const char* in_suppr_spec_path;
+ const char* ref_out_path;
const char* out_path;
};// end struct InOutSpec
InOutSpec in_out_specs[] =
{
{
+ "data/test-read-write/test0.xml",
+ "",
"data/test-read-write/test0.xml",
"output/test-read-write/test0.xml"
},
{
+ "data/test-read-write/test1.xml",
+ "",
"data/test-read-write/test1.xml",
"output/test-read-write/test1.xml"
},
{
+ "data/test-read-write/test2.xml",
+ "",
"data/test-read-write/test2.xml",
"output/test-read-write/test2.xml"
},
{
+ "data/test-read-write/test3.xml",
+ "",
"data/test-read-write/test3.xml",
"output/test-read-write/test3.xml"
},
{
+ "data/test-read-write/test4.xml",
+ "",
"data/test-read-write/test4.xml",
"output/test-read-write/test4.xml"
},
{
+ "data/test-read-write/test5.xml",
+ "",
"data/test-read-write/test5.xml",
"output/test-read-write/test5.xml"
},
{
+ "data/test-read-write/test6.xml",
+ "",
"data/test-read-write/test6.xml",
"output/test-read-write/test6.xml"
},
{
+ "data/test-read-write/test7.xml",
+ "",
"data/test-read-write/test7.xml",
"output/test-read-write/test7.xml"
},
{
+ "data/test-read-write/test8.xml",
+ "",
"data/test-read-write/test8.xml",
"output/test-read-write/test8.xml"
},
{
+ "data/test-read-write/test9.xml",
+ "",
"data/test-read-write/test9.xml",
"output/test-read-write/test9.xml"
},
{
+ "data/test-read-write/test10.xml",
+ "",
"data/test-read-write/test10.xml",
"output/test-read-write/test10.xml"
},
{
+ "data/test-read-write/test11.xml",
+ "",
"data/test-read-write/test11.xml",
"output/test-read-write/test11.xml"
},
{
+ "data/test-read-write/test12.xml",
+ "",
"data/test-read-write/test12.xml",
"output/test-read-write/test12.xml"
},
{
+ "data/test-read-write/test13.xml",
+ "",
"data/test-read-write/test13.xml",
"output/test-read-write/test13.xml"
},
{
+ "data/test-read-write/test14.xml",
+ "",
"data/test-read-write/test14.xml",
"output/test-read-write/test14.xml"
},
{
+ "data/test-read-write/test15.xml",
+ "",
"data/test-read-write/test15.xml",
"output/test-read-write/test15.xml"
},
{
+ "data/test-read-write/test16.xml",
+ "",
"data/test-read-write/test16.xml",
"output/test-read-write/test16.xml"
},
{
+ "data/test-read-write/test17.xml",
+ "",
"data/test-read-write/test17.xml",
"output/test-read-write/test17.xml"
},
{
+ "data/test-read-write/test18.xml",
+ "",
"data/test-read-write/test18.xml",
"output/test-read-write/test18.xml"
},
{
+ "data/test-read-write/test19.xml",
+ "",
"data/test-read-write/test19.xml",
"output/test-read-write/test19.xml"
},
{
+ "data/test-read-write/test20.xml",
+ "",
"data/test-read-write/test20.xml",
"output/test-read-write/test20.xml"
},
{
+ "data/test-read-write/test21.xml",
+ "",
"data/test-read-write/test21.xml",
"output/test-read-write/test21.xml"
},
{
+ "data/test-read-write/test22.xml",
+ "",
"data/test-read-write/test22.xml",
"output/test-read-write/test22.xml"
},
{
+ "data/test-read-write/test23.xml",
+ "",
"data/test-read-write/test23.xml",
"output/test-read-write/test23.xml"
},
{
+ "data/test-read-write/test24.xml",
+ "",
"data/test-read-write/test24.xml",
"output/test-read-write/test24.xml"
},
{
+ "data/test-read-write/test25.xml",
+ "",
"data/test-read-write/test25.xml",
"output/test-read-write/test25.xml"
},
{
+ "data/test-read-write/test26.xml",
+ "",
"data/test-read-write/test26.xml",
"output/test-read-write/test26.xml"
},
{
+ "data/test-read-write/test27.xml",
+ "",
"data/test-read-write/test27.xml",
"output/test-read-write/test27.xml"
},
+ {
+ "data/test-read-write/test28.xml",
+ "data/test-read-write/test28-drop-std-fns.abignore",
+ "data/test-read-write/test28-without-std-fns-ref.xml",
+ "output/test-read-write/test28-without-std-fns.xml"
+ },
+ {
+ "data/test-read-write/test28.xml",
+ "data/test-read-write/test28-drop-std-vars.abignore",
+ "data/test-read-write/test28-without-std-vars-ref.xml",
+ "output/test-read-write/test28-without-std-vars.xml"
+ },
// This should be the last entry.
- {NULL, NULL}
+ {NULL, NULL, NULL, NULL}
};
/// Walk the array of InOutSpecs above, read the input files it points
unsigned result = 1;
bool is_ok = true;
- string in_path, out_path;
+ string in_path, out_path, in_suppr_spec_path, ref_out_path;
for (InOutSpec* s = in_out_specs; s->in_path; ++s)
{
string input_suffix(s->in_path);
if (!check_file(in_path, cerr))
return true;
+ string ref_out_path_suffix(s->ref_out_path);
+ ref_out_path =
+ string(abigail::tests::get_src_dir())
+ + "/tests/" + ref_out_path_suffix;
+
+ if (!check_file(ref_out_path, cerr))
+ return true;
+
+ if (s->in_suppr_spec_path && strcmp(s->in_suppr_spec_path, ""))
+ {
+ in_suppr_spec_path = string(s->in_suppr_spec_path);
+ in_suppr_spec_path =
+ string(abigail::tests::get_src_dir())
+ + "/tests/"
+ + in_suppr_spec_path;
+ }
+ else
+ in_suppr_spec_path.clear();
+
environment_sptr env(new environment);
translation_unit_sptr tu;
corpus_sptr corpus;
- bool read = false;
file_type t = guess_file_type(in_path);
- if (t == abigail::tools_utils::FILE_TYPE_NATIVE_BI)
- read = (tu = read_translation_unit_from_file(in_path, env.get()));
- else if (t == abigail::tools_utils::FILE_TYPE_XML_CORPUS)
- read = (corpus = read_corpus_from_native_xml_file(in_path, env.get()));
- else
- abort();
- if (!read)
+ if (t == abigail::tools_utils::FILE_TYPE_UNKNOWN)
{
- cerr << "failed to read " << in_path << "\n";
+ cerr << in_path << "is an unknown file type\n";
is_ok = false;
continue;
}
return result;
}
- ofstream of(out_path.c_str(), std::ios_base::trunc);
- if (!of.is_open())
- {
- cerr << "failed to read " << out_path << "\n";
- is_ok = false;
- continue;
- }
-
- bool r = false;
-
- if (t == abigail::tools_utils::FILE_TYPE_XML_CORPUS)
- r = write_corpus_to_native_xml(corpus, /*indent=*/0, of);
- else if (t == abigail::tools_utils::FILE_TYPE_NATIVE_BI)
- r = write_translation_unit(*tu, /*indent=*/0, of);
- else
- abort();
-
- is_ok = (is_ok && r);
- of.close();
string abilint = string(get_build_dir()) + "/tools/abilint";
- abilint += " --noout";
- string cmd = abilint + " " + out_path;
+ if (!in_suppr_spec_path.empty())
+ abilint +=string(" --suppr ") + in_suppr_spec_path;
+ string cmd = abilint + " " + in_path + " > " + out_path;
+
if (system(cmd.c_str()))
{
cerr << "ABI XML file doesn't pass abilint: " << out_path << "\n";
is_ok &= false;
}
- cmd = "diff -u " + in_path + " " + out_path;
+ cmd = "diff -u " + ref_out_path + " " + out_path;
if (system(cmd.c_str()))
is_ok &= false;
}
<< " --version|-v display program version information and exit\n"
<< " --debug-info-dir1|--d1 <path> the root for the debug info of file1\n"
<< " --debug-info-dir2|--d2 <path> the root for the debug info of file2\n"
- << " --headers-dir1|--hd1 <path> the path headers of file1\n"
- << " --headers-dir2|--hd2 <path> the path headers of file2\n"
+ << " --headers-dir1|--hd1 <path> the path to headers of file1\n"
+ << " --headers-dir2|--hd2 <path> the path to headers of file2\n"
<< " --stat only display the diff stats\n"
<< " --symtabs only display the symbol tables of the corpora\n"
<< " --no-default-suppression don't load any "
ctxt->dump_diff_tree(opts.dump_diff_tree);
}
+/// Set suppression specifications to the @p read_context used to load
+/// the ABI corpus from the ELF/DWARF file.
+///
+/// These suppression specifications are going to be applied to drop
+/// some ABI artifacts on the floor (while reading the ELF/DWARF file
+/// or the native XML ABI file) and thus minimize the size of the
+/// resulting ABI corpus.
+///
+/// @param read_ctxt the read context to apply the suppression
+/// specifications to. Note that the type of this parameter is
+/// generic (class template) because in practise, it can be either an
+/// abigail::dwarf_reader::read_context type or an
+/// abigail::xml_reader::read_context type.
+///
+/// @param opts the options where to get the suppression
+/// specifications from.
+template<class ReadContextType>
+static void
+set_suppressions(ReadContextType& read_ctxt, const options& opts)
+{
+ suppressions_type supprs;
+ for (vector<string>::const_iterator i = opts.suppression_paths.begin();
+ i != opts.suppression_paths.end();
+ ++i)
+ read_suppressions(*i, supprs);
+ add_read_context_suppressions(read_ctxt, supprs);
+}
+
/// Set the regex patterns describing the functions to drop from the
/// symbol table of a given corpus.
///
&di_dir1, env.get(),
/*read_all_types=*/false);
assert(ctxt);
- abigail::dwarf_reader::set_show_stats
- (*ctxt, opts.show_stats);
+ abigail::dwarf_reader::set_show_stats(*ctxt, opts.show_stats);
+ set_suppressions(*ctxt, opts);
abigail::dwarf_reader::set_do_log(*ctxt, opts.do_log);
-
c1 = abigail::dwarf_reader::read_corpus_from_elf(*ctxt, c1_status);
}
break;
case abigail::tools_utils::FILE_TYPE_XML_CORPUS:
- c1 =
- abigail::xml_reader::read_corpus_from_native_xml_file(opts.file1,
+ {
+ abigail::xml_reader::read_context_sptr ctxt =
+ abigail::xml_reader::create_native_xml_read_context(opts.file1,
env.get());
+ assert(ctxt);
+ set_suppressions(*ctxt, opts);
+ c1 = abigail::xml_reader::read_corpus_from_input(*ctxt);
+ }
break;
case abigail::tools_utils::FILE_TYPE_ZIP_CORPUS:
#ifdef WITH_ZIP_ARCHIVE
&di_dir2, env.get(),
/*read_all_types=*/false);
assert(ctxt);
- abigail::dwarf_reader::set_show_stats
- (*ctxt, opts.show_stats);
+ abigail::dwarf_reader::set_show_stats(*ctxt, opts.show_stats);
abigail::dwarf_reader::set_do_log(*ctxt, opts.do_log);
+ set_suppressions(*ctxt, opts);
c2 = abigail::dwarf_reader::read_corpus_from_elf(*ctxt, c2_status);
}
break;
case abigail::tools_utils::FILE_TYPE_XML_CORPUS:
- c2 =
- abigail::xml_reader::read_corpus_from_native_xml_file(opts.file2,
+ {
+ abigail::xml_reader::read_context_sptr ctxt =
+ abigail::xml_reader::create_native_xml_read_context(opts.file2,
env.get());
+ assert(ctxt);
+ set_suppressions(*ctxt, opts);
+ c2 = abigail::xml_reader::read_corpus_from_input(*ctxt);
+ }
break;
case abigail::tools_utils::FILE_TYPE_ZIP_CORPUS:
#ifdef WITH_ZIP_ARCHIVE
#include <string>
#include <iostream>
#include <fstream>
+#include <vector>
#include <tr1/memory>
#include "abg-config.h"
#include "abg-tools-utils.h"
using std::cout;
using std::ostream;
using std::ofstream;
+using std::vector;
using std::tr1::shared_ptr;
using abigail::tools_utils::emit_prefix;
using abigail::tools_utils::temp_file;
using abigail::tools_utils::temp_file_sptr;
+using abigail::tools_utils::check_file;
+using abigail::ir::environment_sptr;
+using abigail::ir::environment;
+using abigail::corpus;
+using abigail::corpus_sptr;
+using abigail::translation_units;
+using abigail::suppr::suppression_sptr;
+using abigail::suppr::suppressions_type;
+using abigail::suppr::read_suppressions;
using abigail::comparison::corpus_diff;
using abigail::comparison::corpus_diff_sptr;
using abigail::comparison::compute_diff;
using abigail::comparison::diff_context;
using abigail::xml_writer::write_corpus_to_native_xml;
using abigail::xml_reader::read_corpus_from_native_xml_file;
+using abigail::dwarf_reader::read_context;
+using abigail::dwarf_reader::read_context_sptr;
+using abigail::dwarf_reader::read_corpus_from_elf;
+using abigail::dwarf_reader::create_read_context;
+using namespace abigail;
struct options
{
string in_file_path;
string out_file_path;
shared_ptr<char> di_root_path;
+ string headers_dir;
+ vector<string> suppression_paths;
bool display_version;
bool check_alt_debug_info_path;
bool show_base_name_alt_debug_info_path;
<< " --help|-h display this message\n"
<< " --version|-v display program version information and exit\n"
<< " --debug-info-dir|-d <dir-path> look for debug info under 'dir-path'\n"
+ << " --headers-dir|--hd <patch> the path to headers of the elf file\n"
<< " --out-file <file-path> write the output to 'file-path'\n"
<< " --noout do not emit anything after reading the binary\n"
+ << " --suppressions|--suppr <path> specify a suppression file\n"
<< " --no-architecture do not emit architecture info in the output\n"
<< " --no-show-locs do now show location information\n"
<< " --check-alternate-debug-info <elf-path> check alternate debug info "
abigail::tools_utils::make_path_absolute(argv[i + 1]);
++i;
}
+ else if (!strcmp(argv[i], "--headers-dir")
+ || !strcmp(argv[i], "--hd"))
+ {
+ int j = i + 1;
+ if (j >= argc)
+ return false;
+ opts.headers_dir = argv[j];
+ ++i;
+ }
else if (!strcmp(argv[i], "--out-file"))
{
if (argc <= i + 1
opts.out_file_path = argv[i + 1];
++i;
}
+ else if (!strcmp(argv[i], "--suppressions")
+ || !strcmp(argv[i], "--suppr"))
+ {
+ int j = i + 1;
+ if (j >= argc)
+ return false;
+ opts.suppression_paths.push_back(argv[j]);
+ ++i;
+ }
else if (!strcmp(argv[i], "--noout"))
opts.noout = true;
else if (!strcmp(argv[i], "--no-architecture"))
| abigail::comparison::HARMLESS_DECL_NAME_CHANGE_CATEGORY);
}
+/// Check that the suppression specification files supplied are
+/// present. If not, emit an error on stderr.
+///
+/// @param opts the options instance to use.
+///
+/// @return true if all suppression specification files are present,
+/// false otherwise.
+static bool
+maybe_check_suppression_files(const options& opts)
+{
+ for (vector<string>::const_iterator i = opts.suppression_paths.begin();
+ i != opts.suppression_paths.end();
+ ++i)
+ if (!check_file(*i, cerr, "abidiff"))
+ return false;
+
+ return true;
+}
+
+/// Set suppression specifications to the @p read_context used to load
+/// the ABI corpus from the ELF/DWARF file.
+///
+/// These suppression specifications are going to be applied to drop
+/// some ABI artifacts on the floor (while reading the ELF/DWARF file)
+/// and thus minimize the size of the resulting ABI corpus.
+///
+/// @param read_ctxt the read context to apply the suppression
+/// specifications to.
+///
+/// @param opts the options where to get the suppression
+/// specifications from.
+static void
+set_suppressions(read_context& read_ctxt, const options& opts)
+{
+ suppressions_type supprs;
+ for (vector<string>::const_iterator i = opts.suppression_paths.begin();
+ i != opts.suppression_paths.end();
+ ++i)
+ read_suppressions(*i, supprs);
+
+ suppression_sptr suppr =
+ abigail::tools_utils::gen_suppr_spec_from_headers(opts.headers_dir);
+ if (suppr)
+ supprs.push_back(suppr);
+
+ add_read_context_suppressions(read_ctxt, supprs);
+}
+
int
main(int argc, char* argv[])
{
if (!abigail::tools_utils::check_file(opts.in_file_path, cerr, argv[0]))
return 1;
+ if (!maybe_check_suppression_files(opts))
+ return 1;
+
abigail::tools_utils::file_type type =
abigail::tools_utils::guess_file_type(opts.in_file_path);
if (type != abigail::tools_utils::FILE_TYPE_ELF
return 1;
}
- using abigail::ir::environment_sptr;
- using abigail::ir::environment;
- using abigail::corpus;
- using abigail::corpus_sptr;
- using abigail::translation_units;
- using abigail::dwarf_reader::read_context;
- using abigail::dwarf_reader::read_context_sptr;
- using abigail::dwarf_reader::read_corpus_from_elf;
- using abigail::dwarf_reader::create_read_context;
- using namespace abigail;
-
char* p = opts.di_root_path.get();
environment_sptr env(new environment);
corpus_sptr corp;
&p, env.get(),
opts.load_all_types);
read_context& ctxt = *c;
+
set_show_stats(ctxt, opts.show_stats);
+ set_suppressions(ctxt, opts);
abigail::dwarf_reader::set_do_log(ctxt, opts.do_log);
if (opts.check_alt_debug_info_path)
dwarf_reader::status s = dwarf_reader::STATUS_UNKNOWN;
corp = read_corpus_from_elf(ctxt, s);
+ c.reset();
if (!corp)
{
if (s == dwarf_reader::STATUS_DEBUG_INFO_NOT_FOUND)
// -*- Mode: C++ -*-
//
-// Copyright (C) 2013-2015 Red Hat, Inc.
+// Copyright (C) 2013-2016 Red Hat, Inc.
//
// This file is part of the GNU Application Binary Interface Generic
// Analysis and Instrumentation Library (libabigail). This library is
#include <string>
#include <iostream>
#include <fstream>
+#include <vector>
#include "abg-config.h"
#include "abg-tools-utils.h"
#include "abg-ir.h"
#include "abg-reader.h"
#include "abg-dwarf-reader.h"
#include "abg-writer.h"
+#include "abg-suppression.h"
using std::string;
using std::cerr;
using std::cout;
using std::ostream;
using std::ofstream;
+using std::vector;
using abigail::tools_utils::emit_prefix;
using abigail::tools_utils::check_file;
using abigail::tools_utils::file_type;
using abigail::tools_utils::guess_file_type;
+using abigail::suppr::suppression_sptr;
+using abigail::suppr::suppressions_type;
+using abigail::suppr::read_suppressions;
using abigail::corpus;
using abigail::corpus_sptr;
using abigail::xml_reader::read_translation_unit_from_file;
bool diff;
bool noout;
std::tr1::shared_ptr<char> di_root_path;
+ vector<string> suppression_paths;
+ string headers_dir;
options()
: display_version(false),
<< " --help display this message\n"
<< " --version|-v display program version information and exit\n"
<< " --debug-info-dir <path> the path under which to look for "
+ << " --headers-dir|--hd <patch> the path to headers of the elf file\n"
"debug info for the elf <abi-file>\n"
+ << " --suppressions|--suppr <path> specify a suppression file\n"
<< " --diff for xml inputs, perform a text diff between "
"the input and the memory model saved back to disk\n"
<< " --noout do not display anything on stdout\n"
abigail::tools_utils::make_path_absolute(argv[i + 1]);
++i;
}
+ else if (!strcmp(argv[i], "--headers-dir")
+ || !strcmp(argv[i], "--hd"))
+ {
+ int j = i + 1;
+ if (j >= argc)
+ return false;
+ opts.headers_dir = argv[j];
+ ++i;
+ }
+ else if (!strcmp(argv[i], "--suppressions")
+ || !strcmp(argv[i], "--suppr"))
+ {
+ int j = i + 1;
+ if (j >= argc)
+ {
+ opts.wrong_option = argv[i];
+ return true;
+ }
+ opts.suppression_paths.push_back(argv[j]);
+ ++i;
+ }
else if (!strcmp(argv[i], "--stdin"))
opts.read_from_stdin = true;
else if (!strcmp(argv[i], "--tu"))
return true;
}
+/// Check that the suppression specification files supplied are
+/// present. If not, emit an error on stderr.
+///
+/// @param opts the options instance to use.
+///
+/// @return true if all suppression specification files are present,
+/// false otherwise.
+static bool
+maybe_check_suppression_files(const options& opts)
+{
+ for (vector<string>::const_iterator i = opts.suppression_paths.begin();
+ i != opts.suppression_paths.end();
+ ++i)
+ if (!check_file(*i, cerr, "abidiff"))
+ return false;
+
+ return true;
+}
+
+/// Set suppression specifications to the @p read_context used to load
+/// the ABI corpus from the ELF/DWARF file.
+///
+/// These suppression specifications are going to be applied to drop
+/// some ABI artifacts on the floor (while reading the ELF/DWARF file
+/// or the native XML ABI file) and thus minimize the size of the
+/// resulting ABI corpus.
+///
+/// @param read_ctxt the read context to apply the suppression
+/// specifications to. Note that the type of this parameter is
+/// generic (class template) because in practise, it can be either an
+/// abigail::dwarf_reader::read_context type or an
+/// abigail::xml_reader::read_context type.
+///
+/// @param opts the options where to get the suppression
+/// specifications from.
+template<class ReadContextType>
+static void
+set_suppressions(ReadContextType& read_ctxt, const options& opts)
+{
+ suppressions_type supprs;
+ for (vector<string>::const_iterator i = opts.suppression_paths.begin();
+ i != opts.suppression_paths.end();
+ ++i)
+ read_suppressions(*i, supprs);
+
+ suppression_sptr suppr =
+ abigail::tools_utils::gen_suppr_spec_from_headers(opts.headers_dir);
+ if (suppr)
+ supprs.push_back(suppr);
+
+ add_read_context_suppressions(read_ctxt, supprs);
+}
+
/// Reads a bi (binary instrumentation) file, saves it back to a
/// temporary file and run a diff on the two versions.
int
cout << major << "." << minor << "." << revision << "\n";
return 0;
}
+
+ if (!maybe_check_suppression_files(opts))
+ return true;
+
abigail::ir::environment_sptr env(new abigail::ir::environment);
if (opts.read_from_stdin)
{
}
else
{
- corpus_sptr corp = read_corpus_from_native_xml(&cin, env.get());
+ abigail::xml_reader::read_context_sptr ctxt =
+ abigail::xml_reader::create_native_xml_read_context(&cin,
+ env.get());
+ assert(ctxt);
+ set_suppressions(*ctxt, opts);
+ corpus_sptr corp = abigail::xml_reader::read_corpus_from_input(*ctxt);
if (!opts.noout)
write_corpus_to_native_xml(corp, /*indent=*/0, cout);
return false;
break;
case abigail::tools_utils::FILE_TYPE_ELF:
case abigail::tools_utils::FILE_TYPE_AR:
- di_root_path = opts.di_root_path.get();
- corp = read_corpus_from_elf(opts.file_path,
- &di_root_path,
- env.get(),
- /*load_all_types=*/false,
- s);
+ {
+ di_root_path = opts.di_root_path.get();
+ abigail::dwarf_reader::read_context_sptr ctxt =
+ abigail::dwarf_reader::create_read_context(opts.file_path,
+ &di_root_path,
+ env.get(),
+ /*load_all_types=*/false);
+ assert(ctxt);
+ set_suppressions(*ctxt, opts);
+ corp = read_corpus_from_elf(*ctxt, s);
+ }
break;
case abigail::tools_utils::FILE_TYPE_XML_CORPUS:
- corp = read_corpus_from_native_xml_file(opts.file_path, env.get());
- break;
+ {
+ abigail::xml_reader::read_context_sptr ctxt =
+ abigail::xml_reader::create_native_xml_read_context(opts.file_path,
+ env.get());
+ assert(ctxt);
+ set_suppressions(*ctxt, opts);
+ corp = read_corpus_from_input(*ctxt);
+ break;
+ }
case abigail::tools_utils::FILE_TYPE_ZIP_CORPUS:
#if WITH_ZIP_ARCHIVE
corp = read_corpus_from_file(opts.file_path);