Commit Graph

427 Commits

Author SHA1 Message Date
Dodji Seketeli
fcdd6d0e66 Misc diff reporting output cleanup
* src/abg-comparison.cc (function_decl_diff::report): Do not talk
	about changed function anymore.  Rather, say that some indirect
	sub-types changed in the function.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-19 22:44:50 +01:00
Dodji Seketeli
fe698b14bb Do not forget some member types/functions we built IR nodes for
* src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir):
	Associate the member type IR node to the offset of the die of the
	member type.
	(build_ir_node_from_die): For a DW_TAG_subprogram DIE that has a
	DW_AT_specification pointing to another subprogram DIE, associate
	the offset of this DIE to the IR node of that other DIE.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-19 22:44:50 +01:00
Dodji Seketeli
82e83d9c5e Better support of static member variables
* include/abg-fwd.h (fqn_to_components)
	(lookup_type_in_translation_unit, demangle_cplus_mangled_name):
	Declare new public entry points
	* src/abg-comparison.cc (corpus_diff::report): Report stuff about
	global variables using their mangled name, and demangle them.  If
	there is no mangled name for the variable, then use its pretty
	representation.
	(compute_diff): For the corpus overload, compare global variables
	using their mangled name, if its available; otherwise, fall back
	to using their pretty representation.
	* src/abg-corpus.cc (var_comp::operator()(const var_decl*,
	const_var_decl*)): Compare variables using their mangled name in
	priority.  If it's not available then use their pretty
	representation.
	* src/abg-dwarf-reader.cc
	(read_context::var_decls_to_re_add_to_tree): New accessor.
	(build_translation_unit_and_add_to_ir): If there is what appears
	to be a definition of a static member variable variable -- this is
	in case this definition lacks the DW_AT_specification attribute
	that links it to the DW_TAG_member or DW_TAG_variable DIE that is
	a child of the right class/structure DIE -- that is not at the
	right place in the DIE tree, remove it from the its current place
	in the tree and try to hang it off of the right DIE.  To do this,
	de-mangle its mangled name, look at what is supposed to be the
	parent class name, look it up in the translation unit IR, and if
	found, stick the variable IR node in there, as a static member
	variable.  If not found, then bad luck.
	(build_class_type_and_add_to_ir): Do not try to see if a member
	variable is static here as the way I was doing it was unreliable.
	Build the data member node directly w/o going through building a
	variable node first.  Register the data member in the die offset
	-> IR node map.
	(build_ir_node_from_die): When seeing DW_TAG_variable, look for a
	DW_AT_specification attribute.  If there is one, then it points to
	a the DIE of a data member and means that data member is static.
	Flag the IR node of that data member as static thus.  Update the
	die offset -> IR node map.  If there is no DW_AT_specification
	attribute or if it doesn't point to a data member DIE, schedule
	this variable tag for a stage when after the whole IR is built for
	the translation unit, the variable's mangled named is inspected,
	its hypothetical parent struct/class is looked up and the variable
	IR node is put into the node of the right struct/class IR node.
	* src/abg-ir.cc (enum lookup_entity_kind): New.
	(fqn_to_components, iterator, lookup_type_in_translation_unit)
	(lookup_node_in_translation_unit, lookup_type_in_translation_unit)
	(demangle_cplus_mangled_name): New function definitions.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-19 22:44:50 +01:00
Dodji Seketeli
a5e9c127ce Shorten an accessor name in the DWARF reader
* src/abg-dwarf-reader.cc (read_context::cur_tu): Rename
	read_context::current_translation_unit into this.
	(read_context::current_scope, die_location)
	(build_translation_unit_and_add_to_ir, build_enum_type)
	(build_function_decl): Adjust wrt the change above.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-19 22:44:50 +01:00
Dodji Seketeli
1046ba96e6 Unset decl scope when removing the decl from its scope
* src/abg-ir.cc (remove_decl_from_scope): Unset the scope of the
	decl.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-19 22:44:49 +01:00
Dodji Seketeli
5b3a552d8f Support adding data member from var_decl
* src/abg-ir.cc (class_decl::insert_member_decl):  Support taking
	a var_decl.
	(class_decl::add_data_member): Do not insert a data member twice.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-19 16:35:06 +01:00
Dodji Seketeli
a16566b93e Fix qualified type pretty printing
* src/abg-ir.cc (qualified_type_def::qualified_type_def): Remove
	useless white space.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-19 16:29:29 +01:00
Dodji Seketeli
278520086e Add class_decl::member_base::set_is_static() accessor
* include/abg-ir.h (class_decl::member_base::get_is_static):
	Rename is_static into get_is_static.
	(class_decl::member_base::set_is_static): New accessor.
	* src/abg-comparison.cc (represent): Adjust for
	class_decl::member_base::is_static -> get_is_static.
	* src/abg-corpus.cc (symtab_build_visitor_type::visit): Likewise.
	src/abg-hash.cc (class_decl::member_function:#️⃣:operator()):
	Likewise.
	* src/abg-ir.cc (class_decl::member_base::operator==): Likewise.
	* src/abg-writer.cc (write_class_decl): Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-19 16:04:45 +01:00
Dodji Seketeli
6cece6803b Fixes needed to diff libstdc++ v4_4 against master
* src/abg-comparison.cc
	(class_diff::ensure_lookup_tables_populated): Support several
	instances of the same member function being deleted.  That can
	happen when the same member function was present in the initial
	class several times.  Yeah, I've seen that in dwarf.
	* src/abg-corpus.cc (corpus::priv::build_symbol_table): Do not add
	the same variable (identified by its mangled name) twice in the
	variable symbol table.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-13 12:05:03 +01:00
Dodji Seketeli
7f59e159f2 Fix wrong deleted functions count when diffing corpora
* src/abg-comparison.cc
	(corpus_diff::priv::ensure_lookup_tables_populated): If a function
	has changed, deleted it from the list the removed functions.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-13 11:11:56 +01:00
Dodji Seketeli
7a05284c8a Several fixes needed to read libstdc++.so
* src/abg-reader.cc (read_context::map_id_and_node): Allow
	duplicated class and basic type declarations.
	(build_type_decl): Allow duplicated type decls.
	(build_qualified_type_decl, build_pointer_type_def)
	(build_reference_type_def): As there can be several distinct
	duplicated types, compare them by value.
	(build_class_decl): There can be duplicated class decls.
	* src/abg-writer.cc (write_enum_type_decl): The name of the enum
	needs to be xml-escaped.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-13 10:18:41 +01:00
Dodji Seketeli
1b39d66b43 qualified, pointer and reference types can be member types
* src/abg-reader.cc (build_qualified_type_decl)
	(build_pointer_type_def, build_reference_type_def): Consider that
	these types can be member types.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-12 18:10:07 +01:00
Dodji Seketeli
381aff408f Consider two typedefs with different names to be different
* src/abg-ir.cc (typedef_decl::operator==): Consider two typedefs
	with different names to be different.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-12 18:08:54 +01:00
Dodji Seketeli
a8cd3e5152 Really Avoid trying to build IR nodes for non-public functions
* src/abg-dwarf-reader.cc (build_ir_node_from_die): For the
	DW_TAG_subprogram case, bail out early if the current function is
	non-public.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-12 18:06:42 +01:00
Dodji Seketeli
fd21fea696 Add --{changed,deleted,added}-{fns,vars} options to bidiff
* include/abg-comparison.h
	(diff_context::{show_{deleted,changed_added}_{fns,vars}}): Declare
	new accessors.
	(corpus_diff::context): Declare new getter.
	* src/abg-comparison.cc
	(diff_context::{show_{deleted,changed_added}_{fns,vars}}): Define
	these new accessors.
	(corpus_diff::priv::emit_corpus_diff_stats): Define new function.
	(corpus_diff::context()): Define new getter.
	(corpus_diff::report): Use the new
	corpus_diff::priv::emit_corpus_diff_stats to emit diff stats at
	the beginning of the report.  Conditionalise emitting the
	different parts of the reports (changed,deleted,added stuff) on
	the values of the new properties that were just added.
	* tools/bidiff.cc
	(options::{show_{deleted,changed,added}_{fns,vars}): New
	properties.
	(display_usage, parse_command_line): Update for the newly added
	--{changed,deleted,added}-{fns,vars} command line options.
	(set_diff_context_from_opts): Define new static function.
	(main): Create a diff context, initialize it from the options
	(using set_diff_context_from_opts) and pass it to compute_diff.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-12 16:42:14 +01:00
Dodji Seketeli
7209295af9 Add --show-symtabs to bidiff
* tools/bidiff.cc (display_usage): Update usage string.
	(parse_command_line): Recognize the --show-symtab cmdline option.
	(display_symtabs): New static function.
	(main): Call the new display_symtabs.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-11 16:22:52 +01:00
Dodji Seketeli
f6425bc936 Harden class_decl node traversal code
* src/abg-ir.cc (class_decl::traverse): Add a few asserts here and there.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-11 16:20:18 +01:00
Dodji Seketeli
2c3dbbdb62 Fix the pretty representation for member functions
* src/abg-ir.cc (function_decl::get_pretty_representation): Fix
	this to properly display the representation of member functions.
	* tests/data/test-bidiff/test-enum0-report.txt: Update this.
	* tests/data/test-bidiff/test-enum1-report.txt: Likewise.
	* tests/data/test-bidiff/test-qual-type0-report.txt: Likewise.
	* tests/data/test-bidiff/test-struct0-report.txt: Likewise.
	* tests/data/test-bidiff/test-struct1-report.txt: Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-11 16:17:50 +01:00
Dodji Seketeli
9b1e3cd86a Do not forget to traverse member types
* include/abg-ir.h (class_decl::member_type::traverse): Declare new virtual
	function.
	(ir_node_visitor::visit): Declare new virtual function
	* src/abg-ir.cc (class_decl::member_type::traverse): Implement the
	traversal of a member type.
	(ir_node_visitor::visit): Provide a default implementation for the
	visitor of member type.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-11 16:14:53 +01:00
Dodji Seketeli
cc5af46601 From DWARD, avoid adding IR nodes for member functions twice
* include/abg-fwd.h (as_non_member_class_decl): Declare new overload.
	* src/abg-ir.cc (as_non_member_class_decl): Define new overload.
	* src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir): Add
	member functions to the DIE -> IR Node map.
	(build_ir_node_from_die): Assert that DW_TAG_subprogram cannot be
	for a member function here because getting the scope of the member
	function would have constructed the entire class that contains it,
	including the member function.  Then, calling
	build_ir_node_from_die for the DIE of the member function would
	find the already IR Node in the DIE -> IR Node map.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-11 16:04:24 +01:00
Dodji Seketeli
a5b80d8203 Fix access specifiers value
* include/abg-ir.h (class_decl::enum access_specifier): Give the enumerators
	the same values as what the DWARF spec says.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-11 15:59:12 +01:00
Dodji Seketeli
67829e0daa Misc diff report cleanups
* include/abg-ir.h (function_decl::parameter::get_type_name): Add
	comment.
	(function_decl::parameter::get_type_pretty_representation): New
	member fn.
	* src/abg-comparison.cc (represent): When representing changed
	members, use their pretty representation.
	(function_decl_diff::{ensure_lookup_tables_populated, report}): Use the
	pretty representation of parameters type.
	(typedef_diff::report): Enclose the underlying type in "'".
	(corpus_diff::report): Add proper spacing.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 21:31:19 +01:00
Dodji Seketeli
7747431bbc Re-organize the output of diffing two corpora
* src/abg-comparison.cc (corpus_diff::report): Emit
              information about the number of added/removed/changed
              functions.  If the report is big, prefix any added
              function with '[A]' deleted function with '[B]'.  Also,
              fix indentation.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
6f3506215b Support diffing entities of different kinds.
* include/abg-comparison.h (class distinct_diff): Declare new
	type.
	(compute_diff_for_distinct_kinds): Declare new function.
	* src/abg-comparison.cc (distinct_diff::{distinct_diff, first,
	second, entities_are_of_distinct_kinds, length, report}): Define
	new member functions.
	(compute_diff_for_distinct_kinds, try_to_diff_distinct_kinds):
	Define new function.
	(compute_diff_for_types, compute_diff_for_decls): Support diffing
	entities of different kinds.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
421719b075 Avoid recursive comparison on class_decl & perform some optimizations
* src/abg-ir.cc (class_decl::operator==(const decl_base& other)
	const): Bail out early in case of recursive comparison, or if type
	hashes are different.  Do not try to compute qualified name unless
	it's really necessary.  The optimizations part of this change were
	hinted by profiling.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
97f98a4ef2 Handle the DIE for a fn that has a 'specification' attribute
* src/abg-dwarf-reader.cc (build_ir_node_from_die): For the
	DW_TAG_subprogram case, if the function has a DW_AT_specification
	attribute, build the IR node for the specification DIE instead.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
c6bcef76ee Add an assert in the dwarf reader
* src/abg-dwarf-reader.cc (build_class_type_and_add_to_ir):
	Assert that the result of build_function_decl on a member function
	is a method_decl.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
a3f3d5a714 Do not forget that build_ir_node_from_die can return member types
* src/abg-dwarf-reader.cc (get_scope_for_die): Handle member class
	types.
	(build_function_decl): Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
a1972ebe1f A member function can have an empty mangled name
* src/abg-comparison.cc
	(class_diff::ensure_lookup_tables_populated): If a member function
	has an empty mangling name, use its pretty representation.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
53d291cd0b Remove too eager asserts
* src/abg-comparison.cc
	(class_diff::ensure_lookup_tables_populated): Do not assert that
	the same member type cannot be deleted/inserted twice.  It
	actually can for, pointers, references, typedefs, etc.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
7a3229046b Fix some new line handling in diff reports
* src/abg-comparison.cc (represent): Remove extra new line after
	reporting virtual function number.
	(class_diff::report): Do not forget to emit a new line between two
	inserted functions.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:11 +01:00
Dodji Seketeli
698c03709a Perform the diff of changed functions and variables in the right order
* src/abg-comparison.cc
	(corpus_diff::priv::ensure_lookup_tables_populated): In a changed
	function or variable, do not mix up the new and old value.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
593629100f Fix typo in report
* src/abg-comparison.cc (reference_diff::report): Fix typo
	refereneced -> referenced.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
931a97d17d Fix various crashes
* src/abg-comparison.cc (decls_equal::operator()(const decls_type,
	const decls_type) const): Do not crash when of the decl_types is
	NULL.
	({pointer_diff, reference_diff, enum_diff}::length): Avoid
	crashing if the underlying type is NULL.
	* abg-ir.cc (function_decl::get_pretty_representation): Avoid
	crashing on member functions with empty parameter set.

signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
ce9a34ba92 More optimizations hinted by profiling
* include/abg-ir.h (decl_base::qualified_name_): New member.
	(decl_base::get_qualified_name): Cache the qualified name.
	(decl_base::get_type): Return a reference on the shared pointer.
	(method_type::get_class_type): Likewise.
	(class_decl::get_definition_of_declaration): Likewise.
	(class_decl::member_type::get_underlying_type): Likewise.
	(class_decl::base_spec::get_base_class): Likewise.
	* src/abg-ir.cc (decl_base::get_qualified_name): Implement the
	caching.
	(class_decl::member_type::get_qualified_name): Return a reference
	on the shared pointer.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
d8046e575d Avoid crashing when getting function parm type name
* include/abg-ir.h (function_decl::parameter::get_type_name): New
	member function.
	* src/abg-comparison.cc
	(function_decl_diff::ensure_lookup_tables_populated): Use the new
	member function above.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
ef94728513 Small optimization hinted by profiling
* include/abg-diff-utils.h (d_path_vec::max_d): Avoid using member
	functions.  This is relevant only when compiling w/o optimization.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
de342efd76 Fix allocation of diff_utils::d_path_vec
* include/abg-diff-utils.h (d_path_vec::d_path_vec):  Do not
	forget to allocate enough data for reverse vectors as well.  The
	comment of the constructor is accurate.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
cb764d3cdf Misc style fixes
* include/abg-hash.h (combine_hashes): Remove trailing white
	spaces.
	* include/abg-ir.h (class function_decl): Add end-of-class
	comment.
	(struct type_base::cached_hash): Fix comment.
	* src/abg-comparison.cc: Remove useless new line.
	* src/abg-corpus.cc: Likewise.
	* src/abg-writer.cc: Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
9905d847d2 Support looking through decl-only classes and update diff reports
accordingly

	* include/abg-comparison.h (class diff_context): New class.
	(class diff::{ctxt_, reported_once_, currently_reporting_}): New
	data members.
	(diff::diff): Initialize the new data members above.
	(diff::{context, currently_reporting, reported_once}): New
	accessors.
	(compute_diff, var_diff::var_diff, pointer_diff::pointer_diff)
	(reference_diff::reference_diff, qualified_type_diff)
	(enum_diff:enum_diff, class_diff::class_diff)
	(scope_diff::scope_diff, function_decl_diff::function_decl_diff)
	(type_decl_diff::type_decl_diff, typedef_diff::typedef_diff)
	(translation_unit_diff::translation_unit_diff, corpus_diff::corpus_diff):
	Take an additional pointer to diff_context.
	* abg-comparison.cc (diff_context::{has_diff_for,
	has_diff_for_types, add_diff}): New methods.
	(try_to_diff, compute_diff_for_types, compute_diff_for_decls)
	(represent): Take an additional pointer to
	diff_context in argument.  In the later function, do not re-report
	a diff if it has already been reported, or if it's being reported
	already.
	(var_diff::var_diff, pointer_diff::pointer_diff)
	(reference_diff::reference_diff)
	(qualified_type_diff::qualified_type_diff, enum_diff::enum_diff)
	(class_diff::class_diff, scope_diff::scope_diff)
	(function_decl_diff::function_decl_diff, type_decl::type_decl)
	(typedef_diff::typedef_diff)
	(translation_unit_diff::translation_unit_diff)
	(corpus_diff::corpus_diff): Take an additional pointer to
	diff_context in argument.
	({pointer_diff, qualified_type_diff,
	reference_type_diff}::report): do not re-report a diff about the
	underlying type if it has already been reported, or if it's being
	reported already.
	(enum_diff::report): Fix this to properly use the populated lookup
	tables.
	(compute_diff): take an additional pointer to diff_context in
	argument. For the var_decl, pointer_diff reference_type_diff,
	qualified_type_diff enum_diff, scope_diff, function_decl_diff,
	type_decl_diff and typedef_diff overloads, do not re-build a diff
	object, if one exits already.  Otherwise, record the new diff
	object created so that it can be re-used later.
	(enum_diff::ensure_lookup_tables_populated): Fix logic to avoid
	one loop.
	(class_decl::priv::{deleted_member_functions_,
	inserted_member_functions_, changed_member_function_}): New
	members to support reporting about member functions changes.
	(class_decl::{lookup_tables_empty, clear_lookup_tables, length):
	Update for the new additions above.
	(class_decl::ensure_lookup_tables_populated): Likewise.  Fix to
	properly use the lookup tables and also avoid a going through
	several loops to compute the changed members.
	(class_decl::report): Flip a switch to make the beginning and end
	of the reporting, in the context.  Also, do not try to report
	again, if we were already reporting this diff.  Fix quite some
	spots to properly use the lookup tables.
	(scope_diff::ensure_lookup_tables_populated): Skip decl-only
	classes during comparison. Fix some thinkos.  Fix logic to avoid a
	loop.
	(scope_diff::report): Adjust to pass a context to
	compute_diff_for_types.
	(function_decl_diff::ensure_lookup_tables_populated): Fix logic to
	avoid a loop.
	(function_decl_diff::report): Adjust call to
	compute_diff_for_types to pass the context.
	(typedef::report): Avoid re-reporting the diff of the underlying
	types, if we are already reporting it.
	(corpus_diff::priv::ensure_lookup_tables_populated): Use the
	pretty representation of the function rather than its name to key
	the maps of deleted and added functions. Fix logic to avoid going
	through an additional loop for the changed functions.
	(corpus_diff::report): Add a title for removed/added/changed
	functions.  Fix indentation for added/removed/changed functions.
	* include/abg-ir.h (class_decl::comparison_started_): New member
	* src/abg-dwarf-reader.cc (is_public_decl): Style fix.
	(is_declaration_only_): New static function.
	(build_class_type_and_add_to_ir): Create decl-only classes (IR) for
	classes flagged as declaration-only in the DWARF.
	* src/abg-hash.cc (class_decl:#️⃣:operator()): Do not forget to
	include the "is_declaration_only" flag into the hashing.
	* src/abg-ir.cc (class_decl::operator==): Look through decl-only
	classes to get their definitions and compare the definitions
	instead.  Avoid comparing member types and fns if the comparison
	of this type has already started.
	* src/abg-reader.cc (build_class_decl): Set the definition of a
	declaration, when we see it.
	* tests/data/test-bidiff/test-qual-type0-report.txt: Update.
	* tests/data/test-bidiff/test-struct0-report.txt: Likewise.
	* tests/data/test-bidiff/test-struct1-report.txt: Likewise.

signed-off-by: Dodji Seketeli <dodji@redhat.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:10 +01:00
Dodji Seketeli
a2cd6d7e04 Support reading *.bi input with duplicated qualified type ids.
* src/abg-reader.cc (read_context::map_id_and_node): Support
	qualified types with duplicated ids.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:09 +01:00
Dodji Seketeli
b123d39e6d Fix comparison of member types
* src/abg-ir.cc (class_decl::member_type::operator==): Compare the
	underlying type of the member type.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:09 +01:00
Dodji Seketeli
f8e9d43e68 Avoid duplicated entries in the symbol tables of the corpus
* include/abg-ir.h ({var_decl, function_decl}::ptr_equal): New
	  equality functor for pointers to var_decl and function_decl.
	  ({function_decl, var_decl}::hash): Make these hashing functors
	public.
	* include/abg-hash.cc (struct var_decl::hash, struct
	function_decl::hash): Remove these from here.  There are now in
	the public abg-ir.h.
	({var_decl, function_decl}:#️⃣:operator()): Define these here.
	* src/abg-corpus.cc (symtab_build_visitor_type::{fns_map,
	fn_is_in_map, add_fn_to_map, vars_map, var_is_in_map,
	add_var_to_map}): New accessors.
	(corpus::priv::build_symbol_table): Avoid duplicated entries in
	variables and functions symbols tables.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:09 +01:00
Dodji Seketeli
e8dd2cf705 Ease debugging of abigail::diff_utils::compute_diff
* include/abg-diff-utils.h (compute_diff): Add asserts on for the
	length of the shortest edit script during the divide and conquer
	part of the diff algorithm.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:09 +01:00
Dodji Seketeli
b219598e7b Fix further reaching reverse path calculation in core diff algo
* include/abg-diff-utils.h (end_of_frr_d_path_in_k_plus_delta):
	Favour moving left when the two abscissas at the previous steps
	are equal.
	(compute_diff): Update the length of the shortest edit script when
	the size of one of the inputs is zero.
	* tests/test-core-diff.cc (in_out_spec): Add a new input to diff
	two sequences for regression testing.
	* tests/data/test-core-diff/report13.txt: New reference for
	the comparison of the new regression test above.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:09 +01:00
Dodji Seketeli
7d19840822 Add debugging facilities for core diffing issues
* include/abg-ir.h (fns_to_str): Declare new fn.
	* src/abg-ir.cc (get_next_string, fn_to_str, fns_to_str): New
	static functions.
	(fns_to_str): Define new fn.
	* tools/abg-tools-utils.cc (dump_functions_as_string)
	(dump_function_names, compare_functions): New functions.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-02-10 15:51:09 +01:00
Dodji Seketeli
d8dd83d69c Fix apidoc comment
* src/abg-ir.cc (decl_base::operator==): Fix comment.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-01-20 12:18:13 +01:00
Dodji Seketeli
2a078ca1af Fix bilint outputting for translation units & corpus
* tools/bilint.cc (main): Fix logic.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-01-20 12:16:31 +01:00
Dodji Seketeli
e6e4e8425e Remove debugging assertion when diffing
* include/abg-diff-utils.h (d_path_vec::at): Do not check for
	bounds.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-01-20 12:15:07 +01:00
Dodji Seketeli
84323f2a84 Do not use exceptions in dynamic_cast
* src/abg-ir.cc (class_decl::member_function::operator==)
	(class_decl::member_function::operator==): Do not use the
	exception path for dynamic casting.  This was near the top of many
	profiles.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2014-01-20 10:41:28 +01:00