Fix diff report about non-static data members.

It appears that the comparison engine reports deletion of *static*
data members in the context of the ABI changes of their parent
class. That is not right because static data member don't have any ABI
impact on their parent class.  Fixed thus.

	* src/abg-comparison.cc
	(class_diff::priv::{get_deleted_non_static_data_members_number,
	get_inserted_non_static_data_members_number}): Define new member
	functions.
	(class_diff::reports): Use the new functions above.  Also, add
	forgotten new lines where they belong.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
This commit is contained in:
Dodji Seketeli 2015-03-17 11:54:48 +01:00
parent 7424c58426
commit eb0cd8c717

View File

@ -6109,6 +6109,12 @@ struct class_diff::priv
decl_base_sptr
member_class_tmpl_has_changed(decl_base_sptr) const;
size_t
get_deleted_non_static_data_members_number() const;
size_t
get_inserted_non_static_data_members_number() const;
size_t
count_filtered_bases();
@ -6631,6 +6637,46 @@ class_diff::priv::member_class_tmpl_has_changed(decl_base_sptr d) const
: dynamic_pointer_cast<decl_base>(it->second->second_subject()));
}
/// Get the number of non-static data member that were deleted from
/// the class which diff we are looking at.
///
/// @return the number of deleted non-static data members.
size_t
class_diff::priv::get_deleted_non_static_data_members_number() const
{
size_t result = 0;
for (string_decl_base_sptr_map::const_iterator i =
deleted_data_members_.begin();
i != deleted_data_members_.end();
++i)
if (is_member_decl(i->second)
&& !get_member_is_static(i->second))
++result;
return result;
}
/// Get the number of non-static data member that were inserted to the
/// class which diff we are looking at.
///
/// @return the number of inserted non-static data members.
size_t
class_diff::priv::get_inserted_non_static_data_members_number() const
{
size_t result = 0;
for (string_decl_base_sptr_map::const_iterator i =
inserted_data_members_.begin();
i != inserted_data_members_.end();
++i)
if (is_member_decl(i->second)
&& !get_member_is_static(i->second))
++result;
return result;
}
/// Count the number of bases classes whose changes got filtered out.
///
/// @return the number of bases classes whose changes got filtered
@ -7477,7 +7523,7 @@ class_diff::report(ostream& out, const string& indent) const
if (data_members_changes())
{
// report deletions
int numdels = priv_->deleted_data_members_.size();
int numdels = priv_->get_deleted_non_static_data_members_number();
if (numdels)
{
report_mem_header(out, numdels, 0, del_kind,
@ -7492,6 +7538,10 @@ class_diff::report(ostream& out, const string& indent) const
var_decl_sptr data_mem =
dynamic_pointer_cast<var_decl>(*i);
assert(data_mem);
if (get_member_is_static(data_mem))
continue;
if (emitted)
out << "\n";
out << indent << " ";
represent_data_member(data_mem, out);
emitted = true;