ir,corpus,comparison: Const-iffy the access to corpus interfaces

In preparation to subsequent patches that perform manipulations of the
corpus interfaces, it appears that we need to add const access to
those corpus interfaces.

	* include/abg-comparison.h (typedef string_function_ptr_map): Make
	this typedef use a const function_decl*, not just a
	function_decl*.
	(typedef string_var_ptr_map): Make this typedef use a const
	var_decl*, not just a var_decl*.
	* include/abg-corpus.h (typedef corpus::functions): Make this
	typedef be a vector<const function_decl*>, not just a
	vector<function_decl*>.
	(corpus::exported_decls_builder::fn_id_maps_to_several_fns):
	Adjust declaration to const function_decl*.
	* include/abg-fwd.h (typedef istring_var_decl_ptr_map_type)
	(typedef istring_function_decl_ptr_map_type): Move these typedefs to
	abg-ir.h.
	(get_function_id_or_pretty_representation): Use const function_decl*.
	* include/abg-ir.h (typedef istring_var_decl_ptr_map_type)
	(typedef istring_function_decl_ptr_map_type): Move these here from
	abg-fwd.h.  Also make these use const var_decl* and const.
	function_decl.
	* src/abg-comparison-priv.h (sort_string_function_ptr_map)
	(sort_string_var_ptr_map): Use vector<const function_decl*> and
	vector<const var_decl*> rather than their non-const variants.
	* src/abg-comparison.cc (sort_string_function_ptr_map)
	(sort_string_var_ptr_map): Likewise.
	(corpus_diff::priv::{ensure_lookup_tables_populated,
	apply_supprs_to_added_removed_fns_vars_unreachable_types}):
	Adjust.
	* src/abg-corpus-priv.h (corpus::priv::{fns,vars}): Make these
	data members use vector<const function_decl*> and vector<const
	var_decl*> types.
	* src/abg-corpus.cc
	(corpus::exported_decls_builder::fn_id_maps_to_several_fns)
	(corpus::maybe_drop_some_exported_decls): Adjust.
	(corpus_group::priv::{fns,vars}): Make these data members use
	vector<const function_decl*> and vector<const var_decl*> types.
	* src/abg-default-reporter.cc (default_reporter::report): In the
	overload for const corpus_diff&, adjust.
	* src/abg-ir.cc (get_function_id_or_pretty_representation):
	Adjust.
	* src/abg-leaf-reporter.cc (leaf_reporter::report): In the
	overload for const corpus_diff&, adjust.
	* tools/abicompat.cc (perform_compat_check_in_normal_mode):
	Adjust.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
This commit is contained in:
Dodji Seketeli 2024-02-20 17:05:48 +01:00
parent d533d15afa
commit 4b39942467
12 changed files with 97 additions and 122 deletions

View File

@ -204,7 +204,7 @@ typedef unordered_map<string, changed_enumerator> string_changed_enumerator_map;
/// Convenience typedef for a map which key is a string and which
/// value is a pointer to @ref decl_base.
typedef unordered_map<string, function_decl*> string_function_ptr_map;
typedef unordered_map<string, const function_decl*> string_function_ptr_map;
/// Convenience typedef for a map which key is a string and which
/// value is a @ref function_decl_diff_sptr.
@ -229,7 +229,7 @@ typedef unordered_map<string, method_decl_sptr> string_member_function_sptr_map;
/// Convenience typedef for a map which key is a string and which
/// value is a point to @ref var_decl.
typedef unordered_map<string, var_decl*> string_var_ptr_map;
typedef unordered_map<string, const var_decl*> string_var_ptr_map;
/// Convenience typedef for a pair of pointer to @ref var_decl
/// representing a @ref var_decl change. The first member of the pair

View File

@ -28,10 +28,10 @@ public:
typedef vector<string> strings_type;
/// Convenience typedef for std::vector<abigail::ir::function_decl*>
typedef vector<function_decl*> functions;
typedef vector<const function_decl*> functions;
///Convenience typedef for std::vector<abigail::ir::var_decl*>
typedef vector<var_decl*> variables;
typedef vector<const var_decl*> variables;
class exported_decls_builder;
@ -331,7 +331,7 @@ public:
exported_functions();
std::unordered_set<function_decl*>*
fn_id_maps_to_several_fns(function_decl*);
fn_id_maps_to_several_fns(const function_decl*);
const variables&
exported_variables() const;

View File

@ -255,10 +255,6 @@ typedef shared_ptr<var_decl> var_decl_sptr;
/// Convenience typedef for a weak pointer on a @ref var_decl
typedef weak_ptr<var_decl> var_decl_wptr;
typedef unordered_map<interned_string,
var_decl*,
hash_interned_string> istring_var_decl_ptr_map_type;
class scope_decl;
/// Convenience typedef for a shared pointer on a @ref scope_decl.
@ -269,10 +265,6 @@ class function_decl;
/// Convenience typedef for a shared pointer on a @ref function_decl
typedef shared_ptr<function_decl> function_decl_sptr;
typedef unordered_map<interned_string,
function_decl*,
hash_interned_string> istring_function_decl_ptr_map_type;
class method_decl;
typedef shared_ptr<method_decl> method_decl_sptr;
@ -1096,7 +1088,7 @@ interned_string
get_function_type_name(const function_type&, bool internal = false);
interned_string
get_function_id_or_pretty_representation(function_decl *fn);
get_function_id_or_pretty_representation(const function_decl *fn);
interned_string
get_method_type_name(const method_type_sptr&, bool internal = false);

View File

@ -574,6 +574,14 @@ typedef unordered_map<interned_string,
hash_interned_string>
istring_type_or_decl_base_sptr_map_type;
typedef unordered_map<interned_string,
const function_decl*,
hash_interned_string> istring_function_decl_ptr_map_type;
typedef unordered_map<interned_string,
const var_decl*,
hash_interned_string> istring_var_decl_ptr_map_type;
/// This is a type that aggregates maps of all the kinds of types that
/// are supported by libabigail.
///

View File

@ -1422,7 +1422,7 @@ sort_changed_data_members(changed_var_sptrs_type& input);
void
sort_string_function_ptr_map(const string_function_ptr_map& map,
vector<function_decl*>& sorted);
vector<const function_decl*>& sorted);
void
sort_string_member_function_sptr_map(const string_member_function_sptr_map& map,
@ -1447,7 +1447,7 @@ sort_string_elf_symbol_map(const string_elf_symbol_map& map,
void
sort_string_var_ptr_map(const string_var_ptr_map& map,
vector<var_decl*>& sorted);
vector<const var_decl*>& sorted);
void
sort_string_data_member_diff_sptr_map(const string_var_diff_sptr_map& map,

View File

@ -176,7 +176,7 @@ sort_changed_data_members(changed_var_sptrs_type& to_sort)
/// @param sorted the resulting sorted vector.
void
sort_string_function_ptr_map(const string_function_ptr_map& map,
vector<function_decl*>& sorted)
vector<const function_decl*>& sorted)
{
sorted.reserve(map.size());
for (string_function_ptr_map::const_iterator i = map.begin();
@ -283,7 +283,7 @@ sort_string_elf_symbol_map(const string_elf_symbol_map& map,
/// @param sorted out parameter; the sorted vector of @ref var_decl.
void
sort_string_var_ptr_map(const string_var_ptr_map& map,
vector<var_decl*>& sorted)
vector<const var_decl*>& sorted)
{
for (string_var_ptr_map::const_iterator i = map.begin();
i != map.end();
@ -9382,7 +9382,7 @@ corpus_diff::priv::ensure_lookup_tables_populated()
unsigned i = it->index();
ABG_ASSERT(i < first_->get_functions().size());
function_decl* deleted_fn = first_->get_functions()[i];
const function_decl* deleted_fn = first_->get_functions()[i];
string n = get_function_id_or_pretty_representation(deleted_fn);
ABG_ASSERT(!n.empty());
// The below is commented out because there can be several
@ -9402,7 +9402,7 @@ corpus_diff::priv::ensure_lookup_tables_populated()
++iit)
{
unsigned i = *iit;
function_decl* added_fn = second_->get_functions()[i];
const function_decl* added_fn = second_->get_functions()[i];
string n = get_function_id_or_pretty_representation(added_fn);
ABG_ASSERT(!n.empty());
// The below is commented out because there can be several
@ -9413,8 +9413,10 @@ corpus_diff::priv::ensure_lookup_tables_populated()
deleted_fns_.find(n);
if (j != deleted_fns_.end())
{
function_decl_sptr f(j->second, noop_deleter());
function_decl_sptr s(added_fn, noop_deleter());
function_decl_sptr f(const_cast<function_decl*>(j->second),
noop_deleter());
function_decl_sptr s(const_cast<function_decl*>(added_fn),
noop_deleter());
function_decl_diff_sptr d = compute_diff(f, s, ctxt);
if (*j->second != *added_fn)
changed_fns_map_[j->first] = d;
@ -9482,7 +9484,7 @@ corpus_diff::priv::ensure_lookup_tables_populated()
unsigned i = it->index();
ABG_ASSERT(i < first_->get_variables().size());
var_decl* deleted_var = first_->get_variables()[i];
const var_decl* deleted_var = first_->get_variables()[i];
string n = deleted_var->get_id();
ABG_ASSERT(!n.empty());
ABG_ASSERT(deleted_vars_.find(n) == deleted_vars_.end());
@ -9499,7 +9501,7 @@ corpus_diff::priv::ensure_lookup_tables_populated()
++iit)
{
unsigned i = *iit;
var_decl* added_var = second_->get_variables()[i];
const var_decl* added_var = second_->get_variables()[i];
string n = added_var->get_id();
ABG_ASSERT(!n.empty());
{
@ -9517,8 +9519,10 @@ corpus_diff::priv::ensure_lookup_tables_populated()
{
if (*j->second != *added_var)
{
var_decl_sptr f(j->second, noop_deleter());
var_decl_sptr s(added_var, noop_deleter());
var_decl_sptr f(const_cast<var_decl*>(j->second),
noop_deleter());
var_decl_sptr s(const_cast<var_decl*>(added_var),
noop_deleter());
changed_vars_map_[n] = compute_diff(f, s, ctxt);
}
deleted_vars_.erase(j);
@ -10045,7 +10049,7 @@ corpus_diff::priv::apply_supprs_to_added_removed_fns_vars_unreachable_types()
if (is_member_function(e->second)
&& get_member_function_is_virtual(e->second))
{
function_decl *f = e->second;
const function_decl *f = e->second;
class_decl_sptr c =
is_class_type(is_method_type(f->get_type())->get_class_type());
ABG_ASSERT(c);
@ -10059,7 +10063,7 @@ corpus_diff::priv::apply_supprs_to_added_removed_fns_vars_unreachable_types()
if (is_member_function(e->second)
&& get_member_function_is_virtual(e->second))
{
function_decl *f = e->second;
const function_decl *f = e->second;
class_decl_sptr c =
is_class_type(is_method_type(f->get_type())->get_class_type());
ABG_ASSERT(c);

View File

@ -742,8 +742,8 @@ struct corpus::priv
string architecture_name;
translation_units members;
string_tu_map_type path_tu_map;
vector<function_decl*> fns;
vector<var_decl*> vars;
vector<const function_decl*> fns;
vector<const var_decl*> vars;
symtab_reader::symtab_sptr symtab_;
// The type maps contained in this data member are populated if the
// corpus follows the One Definition Rule and thus if there is only

View File

@ -122,7 +122,7 @@ corpus::exported_decls_builder::exported_functions()
/// @return the set of functions designated by the ELF symbol of @p
/// fn, or nullptr if the function ID maps to just @p fn.
std::unordered_set<function_decl*>*
corpus::exported_decls_builder::fn_id_maps_to_several_fns(function_decl* fn)
corpus::exported_decls_builder::fn_id_maps_to_several_fns(const function_decl* fn)
{
std::unordered_set<function_decl*> *fns_for_id =
priv_->fn_id_is_in_id_fns_map(fn);
@ -1570,11 +1570,9 @@ corpus::maybe_drop_some_exported_decls()
{
string sym_name, sym_version;
vector<function_decl*> fns_to_keep;
functions fns_to_keep;
exported_decls_builder* b = get_exported_decls_builder().get();
for (vector<function_decl*>::iterator f = priv_->fns.begin();
f != priv_->fns.end();
++f)
for (auto f = priv_->fns.begin(); f != priv_->fns.end(); ++f)
{
if (b->priv_->keep_wrt_id_of_fns_to_keep(*f)
&& b->priv_->keep_wrt_regex_of_fns_to_suppress(*f)
@ -1583,10 +1581,8 @@ corpus::maybe_drop_some_exported_decls()
}
priv_->fns = fns_to_keep;
vector<var_decl*> vars_to_keep;
for (vector<var_decl*>::iterator v = priv_->vars.begin();
v != priv_->vars.end();
++v)
variables vars_to_keep;
for (auto v = priv_->vars.begin(); v != priv_->vars.end(); ++v)
{
if (b->priv_->keep_wrt_id_of_vars_to_keep(*v)
&& b->priv_->keep_wrt_regex_of_vars_to_suppress(*v)
@ -1690,9 +1686,9 @@ struct corpus_group::priv
std::set<string> corpora_paths;
corpora_type corpora;
istring_function_decl_ptr_map_type fns_map;
vector<function_decl*> fns;
corpus::functions fns;
istring_var_decl_ptr_map_type vars_map;
vector<var_decl*> vars;
corpus::variables vars;
string_elf_symbols_map_type var_symbol_map;
string_elf_symbols_map_type fun_symbol_map;
elf_symbols sorted_var_symbols;

View File

@ -1886,32 +1886,29 @@ default_reporter::report(const corpus_diff& d, ostream& out,
out << indent << s.net_num_func_removed() << " Removed functions:\n\n";
bool emitted = false;
vector<function_decl*>sorted_deleted_fns;
corpus::functions sorted_deleted_fns;
sort_string_function_ptr_map(d.priv_->deleted_fns_, sorted_deleted_fns);
for (vector<function_decl*>::const_iterator i =
sorted_deleted_fns.begin();
i != sorted_deleted_fns.end();
++i)
for (auto f : sorted_deleted_fns)
{
if (d.priv_->deleted_function_is_suppressed(*i))
if (d.priv_->deleted_function_is_suppressed(f))
continue;
out << indent
<< " ";
out << "[D] ";
out << "'" << (*i)->get_pretty_representation() << "'";
out << "'" << (f)->get_pretty_representation() << "'";
if (ctxt->show_linkage_names())
{
out << " {";
show_linkage_name_and_aliases(out, "", *(*i)->get_symbol(),
show_linkage_name_and_aliases(out, "", *(f)->get_symbol(),
d.first_corpus()->get_fun_symbol_map());
out << "}";
}
out << "\n";
if (is_member_function(*i) && get_member_function_is_virtual(*i))
if (is_member_function(f) && get_member_function_is_virtual(f))
{
class_decl_sptr c =
is_class_type(is_method_type((*i)->get_type())->get_class_type());
is_class_type(is_method_type(f->get_type())->get_class_type());
out << indent
<< " "
<< "note that this removes an entry from the vtable of "
@ -1932,13 +1929,11 @@ default_reporter::report(const corpus_diff& d, ostream& out,
out << indent << s.net_num_func_added()
<< " Added functions:\n\n";
bool emitted = false;
vector<function_decl*> sorted_added_fns;
corpus::functions sorted_added_fns;
sort_string_function_ptr_map(d.priv_->added_fns_, sorted_added_fns);
for (vector<function_decl*>::const_iterator i = sorted_added_fns.begin();
i != sorted_added_fns.end();
++i)
for (auto f : sorted_added_fns)
{
if (d.priv_->added_function_is_suppressed(*i))
if (d.priv_->added_function_is_suppressed(f))
continue;
out
@ -1946,21 +1941,21 @@ default_reporter::report(const corpus_diff& d, ostream& out,
<< " ";
out << "[A] ";
out << "'"
<< (*i)->get_pretty_representation()
<< f->get_pretty_representation()
<< "'";
if (ctxt->show_linkage_names())
{
out << " {";
show_linkage_name_and_aliases
(out, "", *(*i)->get_symbol(),
(out, "", *f->get_symbol(),
d.second_corpus()->get_fun_symbol_map());
out << "}";
}
out << "\n";
if (is_member_function(*i) && get_member_function_is_virtual(*i))
if (is_member_function(f) && get_member_function_is_virtual(f))
{
class_decl_sptr c =
is_class_type(is_method_type((*i)->get_type())->get_class_type());
is_class_type(is_method_type(f->get_type())->get_class_type());
out << indent
<< " "
<< "note that this adds a new entry to the vtable of "
@ -2063,17 +2058,14 @@ default_reporter::report(const corpus_diff& d, ostream& out,
<< " Removed variables:\n\n";
string n;
bool emitted = false;
vector<var_decl*> sorted_deleted_vars;
corpus::variables sorted_deleted_vars;
sort_string_var_ptr_map(d.priv_->deleted_vars_, sorted_deleted_vars);
for (vector<var_decl*>::const_iterator i =
sorted_deleted_vars.begin();
i != sorted_deleted_vars.end();
++i)
for (auto v : sorted_deleted_vars)
{
if (d.priv_->deleted_variable_is_suppressed(*i))
if (d.priv_->deleted_variable_is_suppressed(v))
continue;
n = (*i)->get_pretty_representation();
n = v->get_pretty_representation();
out << indent
<< " ";
@ -2084,7 +2076,7 @@ default_reporter::report(const corpus_diff& d, ostream& out,
if (ctxt->show_linkage_names())
{
out << " {";
show_linkage_name_and_aliases(out, "", *(*i)->get_symbol(),
show_linkage_name_and_aliases(out, "", *v->get_symbol(),
d.first_corpus()->get_var_symbol_map());
out << "}";
}
@ -2104,17 +2096,14 @@ default_reporter::report(const corpus_diff& d, ostream& out,
<< " Added variables:\n\n";
string n;
bool emitted = false;
vector<var_decl*> sorted_added_vars;
corpus::variables sorted_added_vars;
sort_string_var_ptr_map(d.priv_->added_vars_, sorted_added_vars);
for (vector<var_decl*>::const_iterator i =
sorted_added_vars.begin();
i != sorted_added_vars.end();
++i)
for (auto v : sorted_added_vars)
{
if (d.priv_->added_variable_is_suppressed(*i))
if (d.priv_->added_variable_is_suppressed(v))
continue;
n = (*i)->get_pretty_representation();
n = v->get_pretty_representation();
out << indent
<< " ";
@ -2123,7 +2112,7 @@ default_reporter::report(const corpus_diff& d, ostream& out,
if (ctxt->show_linkage_names())
{
out << " {";
show_linkage_name_and_aliases(out, "", *(*i)->get_symbol(),
show_linkage_name_and_aliases(out, "", *v->get_symbol(),
d.second_corpus()->get_var_symbol_map());
out << "}";
}

View File

@ -9221,13 +9221,13 @@ get_function_type_name(const function_type& fn_type,
///
/// @return the function ID of pretty representation of @p fn.
interned_string
get_function_id_or_pretty_representation(function_decl *fn)
get_function_id_or_pretty_representation(const function_decl *fn)
{
ABG_ASSERT(fn);
interned_string result = fn->get_environment().intern(fn->get_id());
if (corpus *c = fn->get_corpus())
if (const corpus *c = fn->get_corpus())
{
corpus::exported_decls_builder_sptr b =
c->get_exported_decls_builder();

View File

@ -1074,32 +1074,29 @@ leaf_reporter::report(const corpus_diff& d,
out << indent << s.net_num_func_removed() << " Removed functions:\n\n";
bool emitted = false;
vector<function_decl*>sorted_deleted_fns;
corpus::functions sorted_deleted_fns;
sort_string_function_ptr_map(d.priv_->deleted_fns_, sorted_deleted_fns);
for (vector<function_decl*>::const_iterator i =
sorted_deleted_fns.begin();
i != sorted_deleted_fns.end();
++i)
for (auto f : sorted_deleted_fns)
{
if (d.priv_->deleted_function_is_suppressed(*i))
if (d.priv_->deleted_function_is_suppressed(f))
continue;
out << indent
<< " ";
out << "[D] ";
out << "'" << (*i)->get_pretty_representation() << "'";
out << "'" << f->get_pretty_representation() << "'";
if (ctxt->show_linkage_names())
{
out << " {";
show_linkage_name_and_aliases(out, "", *(*i)->get_symbol(),
show_linkage_name_and_aliases(out, "", *f->get_symbol(),
d.first_corpus()->get_fun_symbol_map());
out << "}";
}
out << "\n";
if (is_member_function(*i) && get_member_function_is_virtual(*i))
if (is_member_function(f) && get_member_function_is_virtual(f))
{
class_decl_sptr c =
is_class_type(is_method_type((*i)->get_type())->get_class_type());
is_class_type(is_method_type(f->get_type())->get_class_type());
out << indent
<< " "
<< "note that this removes an entry from the vtable of "
@ -1120,13 +1117,11 @@ leaf_reporter::report(const corpus_diff& d,
out << indent << s.net_num_func_added()
<< " Added functions:\n\n";
bool emitted = false;
vector<function_decl*> sorted_added_fns;
corpus::functions sorted_added_fns;
sort_string_function_ptr_map(d.priv_->added_fns_, sorted_added_fns);
for (vector<function_decl*>::const_iterator i = sorted_added_fns.begin();
i != sorted_added_fns.end();
++i)
for (auto f : sorted_added_fns)
{
if (d.priv_->added_function_is_suppressed(*i))
if (d.priv_->added_function_is_suppressed(f))
continue;
out
@ -1134,21 +1129,21 @@ leaf_reporter::report(const corpus_diff& d,
<< " ";
out << "[A] ";
out << "'"
<< (*i)->get_pretty_representation()
<< f->get_pretty_representation()
<< "'";
if (ctxt->show_linkage_names())
{
out << " {";
show_linkage_name_and_aliases
(out, "", *(*i)->get_symbol(),
(out, "", *f->get_symbol(),
d.second_corpus()->get_fun_symbol_map());
out << "}";
}
out << "\n";
if (is_member_function(*i) && get_member_function_is_virtual(*i))
if (is_member_function(f) && get_member_function_is_virtual(f))
{
class_decl_sptr c =
is_class_type(is_method_type((*i)->get_type())->get_class_type());
is_class_type(is_method_type(f->get_type())->get_class_type());
out << indent
<< " "
<< "note that this adds a new entry to the vtable of "
@ -1239,17 +1234,14 @@ leaf_reporter::report(const corpus_diff& d,
<< " Removed variables:\n\n";
string n;
bool emitted = false;
vector<var_decl*> sorted_deleted_vars;
corpus::variables sorted_deleted_vars;
sort_string_var_ptr_map(d.priv_->deleted_vars_, sorted_deleted_vars);
for (vector<var_decl*>::const_iterator i =
sorted_deleted_vars.begin();
i != sorted_deleted_vars.end();
++i)
for (auto v : sorted_deleted_vars)
{
if (d.priv_->deleted_variable_is_suppressed(*i))
if (d.priv_->deleted_variable_is_suppressed(v))
continue;
n = (*i)->get_pretty_representation();
n = v->get_pretty_representation();
out << indent
<< " ";
@ -1260,7 +1252,7 @@ leaf_reporter::report(const corpus_diff& d,
if (ctxt->show_linkage_names())
{
out << " {";
show_linkage_name_and_aliases(out, "", *(*i)->get_symbol(),
show_linkage_name_and_aliases(out, "", *v->get_symbol(),
d.first_corpus()->get_var_symbol_map());
out << "}";
}
@ -1280,17 +1272,14 @@ leaf_reporter::report(const corpus_diff& d,
<< " Added variables:\n\n";
string n;
bool emitted = false;
vector<var_decl*> sorted_added_vars;
corpus::variables sorted_added_vars;
sort_string_var_ptr_map(d.priv_->added_vars_, sorted_added_vars);
for (vector<var_decl*>::const_iterator i =
sorted_added_vars.begin();
i != sorted_added_vars.end();
++i)
for (auto v : sorted_added_vars)
{
if (d.priv_->added_variable_is_suppressed(*i))
if (d.priv_->added_variable_is_suppressed(v))
continue;
n = (*i)->get_pretty_representation();
n = v->get_pretty_representation();
out << indent
<< " ";
@ -1299,7 +1288,7 @@ leaf_reporter::report(const corpus_diff& d,
if (ctxt->show_linkage_names())
{
out << " {";
show_linkage_name_and_aliases(out, "", *(*i)->get_symbol(),
show_linkage_name_and_aliases(out, "", *v->get_symbol(),
d.second_corpus()->get_var_symbol_map());
out << "}";
}
@ -1319,12 +1308,9 @@ leaf_reporter::report(const corpus_diff& d,
out << indent << num_changed
<< " Changed variables:\n\n";
string n1, n2;
for (var_diff_sptrs_type::const_iterator i =
d.priv_->sorted_changed_vars_.begin();
i != d.priv_->sorted_changed_vars_.end();
++i)
for (auto d : d.priv_->sorted_changed_vars_)
{
diff_sptr diff = *i;
diff_sptr diff = d;
if (!diff)
continue;

View File

@ -435,14 +435,14 @@ perform_compat_check_in_normal_mode(options& opts,
/// the differences found in the type of that function.
struct fn_change
{
function_decl* decl;
const function_decl* decl;
function_type_diff_sptr diff;
fn_change()
: decl()
{}
fn_change(function_decl* decl,
fn_change(const function_decl* decl,
function_type_diff_sptr difference)
: decl(decl),
diff(difference)
@ -454,14 +454,14 @@ struct fn_change
/// the differences found in the type of that variable.
struct var_change
{
var_decl* decl;
const var_decl* decl;
diff_sptr diff;
var_change()
: decl()
{}
var_change(var_decl* var,
var_change(const var_decl* var,
diff_sptr difference)
: decl(var),
diff(difference)