From 6baecca506d9868118816fff92f4767acd4f494e Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Wed, 15 Apr 2015 15:03:59 +0200 Subject: [PATCH] 18252 - Added parameters are not properly sorted In the changed functions/variables section of the abidiff report, when function parameters were added or removed, they were not properly sorted. This patch fixes that. * src/abg-comparison.cc (sort_string_parm_map): Define new static function. (struct parm_comp): Define new type. (function_type_diff::priv::{sorted_deleted_parms_, sorted_added_parms_}): New data members that hold sorted deleted/added parameters. (function_type_diff::ensure_lookup_tables_populated): Initialize the two new data members above. (function_type_diff::report): For the report of parameters that got added/removed, use the sorted set of added/removed parameters above. * tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt: New test input. * tests/data/test-diff-dwarf/libtest24-added-fn-parms-v{0,1}.so: Likewise. * tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt: Likewise. * tests/data/test-diff-dwarf/libtest25-removed-fn-parms-v{0,1}.so: Likewise. * tests/data/test-diff-dwarf/test24-added-fn-parms-v{0,1}.c: Likewise. * tests/data/test-diff-dwarf/test25-removed-fn-parms-v{0,1}.c: Likewise. * tests/data/Makefile.am: Add the new test material above to the source distribution. Signed-off-by: Dodji Seketeli --- src/abg-comparison.cc | 83 ++++++++++++++++-- tests/data/Makefile.am | 10 +++ .../libtest24-added-fn-parms-v0.so | Bin 0 -> 8786 bytes .../libtest24-added-fn-parms-v1.so | Bin 0 -> 8922 bytes .../libtest25-removed-fn-parms-v0.so | Bin 0 -> 8922 bytes .../libtest25-removed-fn-parms-v1.so | Bin 0 -> 8786 bytes .../test24-added-fn-parms-report-0.txt | 12 +++ .../test24-added-fn-parms-v0.c | 6 ++ .../test24-added-fn-parms-v1.c | 13 +++ .../test25-removed-fn-parms-report-0.txt | 12 +++ .../test25-removed-fn-parms-v0.c | 8 ++ .../test25-removed-fn-parms-v1.c | 6 ++ tests/test-diff-dwarf.cc | 12 +++ 13 files changed, 154 insertions(+), 8 deletions(-) create mode 100755 tests/data/test-diff-dwarf/libtest24-added-fn-parms-v0.so create mode 100755 tests/data/test-diff-dwarf/libtest24-added-fn-parms-v1.so create mode 100755 tests/data/test-diff-dwarf/libtest25-removed-fn-parms-v0.so create mode 100755 tests/data/test-diff-dwarf/libtest25-removed-fn-parms-v1.so create mode 100644 tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt create mode 100644 tests/data/test-diff-dwarf/test24-added-fn-parms-v0.c create mode 100644 tests/data/test-diff-dwarf/test24-added-fn-parms-v1.c create mode 100644 tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt create mode 100644 tests/data/test-diff-dwarf/test25-removed-fn-parms-v0.c create mode 100644 tests/data/test-diff-dwarf/test25-removed-fn-parms-v1.c diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc index 796b9aa3..9f1416a6 100644 --- a/src/abg-comparison.cc +++ b/src/abg-comparison.cc @@ -282,6 +282,10 @@ static void sort_string_fn_parm_diff_sptr_map(const string_fn_parm_diff_sptr_map& map, vector& sorted); +static void +sort_string_parm_map(const string_parm_map& map, + vector& sorted); + static type_base_sptr get_leaf_type(qualified_type_def_sptr t); @@ -9081,7 +9085,9 @@ struct function_type_diff::priv // useful lookup tables. string_parm_map deleted_parms_; + vector sorted_deleted_parms_; string_parm_map added_parms_; + vector sorted_added_parms_; // This map contains parameters sub-type changes that don't change // the name of the type of the parameter. string_fn_parm_diff_sptr_map subtype_changed_parms_; @@ -9168,6 +9174,12 @@ function_type_diff::ensure_lookup_tables_populated() } } } + + sort_string_parm_map(priv_->deleted_parms_, + priv_->sorted_deleted_parms_); + + sort_string_parm_map(priv_->added_parms_, + priv_->sorted_added_parms_); } /// In the vector of deleted parameters, get the one that is at a given @@ -9396,12 +9408,13 @@ function_type_diff::report(ostream& out, const string& indent) const // Report about the parameters that got removed. bool emitted = false; - for (string_parm_map::const_iterator i = priv_->deleted_parms_.begin(); - i != priv_->deleted_parms_.end(); + for (vector::const_iterator i = + priv_->sorted_deleted_parms_.begin(); + i != priv_->sorted_deleted_parms_.end(); ++i) { - out << indent << "parameter " << i->second->get_index() - << " of type '" << i->second->get_type_pretty_representation() + out << indent << "parameter " << (*i)->get_index() + << " of type '" << (*i)->get_type_pretty_representation() << "' was removed\n"; emitted = true; } @@ -9410,12 +9423,13 @@ function_type_diff::report(ostream& out, const string& indent) const // Report about the parameters that got added emitted = false; - for (string_parm_map::const_iterator i = priv_->added_parms_.begin(); - i != priv_->added_parms_.end(); + for (vector::const_iterator i = + priv_->sorted_added_parms_.begin(); + i != priv_->sorted_added_parms_.end(); ++i) { - out << indent << "parameter " << i->second->get_index() - << " of type '" << i->second->get_type_pretty_representation() + out << indent << "parameter " << (*i)->get_index() + << " of type '" << (*i)->get_type_pretty_representation() << "' was added\n"; emitted = true; } @@ -9645,6 +9659,59 @@ sort_string_fn_parm_diff_sptr_map(const string_fn_parm_diff_sptr_map& map, std::sort(sorted.begin(), sorted.end(), comp); } +/// Functor that compares two function parameters for the purpose of +/// sorting them. +struct parm_comp +{ + /// Returns true iff the index of the first parameter is smaller + /// than the of the second parameter. + /// + /// @param l the first parameter to compare. + /// + /// @param r the second parameter to compare. + /// + /// @return true iff the index of the first parameter is smaller + /// than the of the second parameter. + bool + operator()(const function_decl::parameter& l, + const function_decl::parameter& r) + {return l.get_index() < r.get_index();} + + /// Returns true iff the index of the first parameter is smaller + /// than the of the second parameter. + /// + /// @param l the first parameter to compare. + /// + /// @param r the second parameter to compare. + /// + /// @return true iff the index of the first parameter is smaller + /// than the of the second parameter. + bool + operator()(const function_decl::parameter_sptr& l, + const function_decl::parameter_sptr& r) + {return operator()(*l, *r);} +}; // end struct parm_comp + +/// Sort a map of string -> function parameters. +/// +/// @param map the map to sort. +/// +/// @param sorted the resulting sorted vector of +/// @ref vector +static void +sort_string_parm_map(const string_parm_map& map, + vector& sorted) +{ + for (string_parm_map::const_iterator i = map.begin(); + i != map.end(); + ++i) + sorted.push_back(i->second); + + // TODO: finish this. + parm_comp comp; + std::sort(sorted.begin(), sorted.end(), comp); +} + /// Serialize a report of the changes encapsulated in the current /// instance of function_decl_diff over to an output stream. /// diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index ac48ef06..cb816ae4 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -192,6 +192,16 @@ test-diff-dwarf/libtest-23-diff-arch-v0-32.so \ test-diff-dwarf/libtest-23-diff-arch-v0-64.so \ test-diff-dwarf/test-23-diff-arch-report-0.txt \ test-diff-dwarf/test-23-diff-arch-v0.cc \ +test-diff-dwarf/libtest24-added-fn-parms-v0.so \ +test-diff-dwarf/libtest24-added-fn-parms-v1.so \ +test-diff-dwarf/test24-added-fn-parms-report-0.txt \ +test-diff-dwarf/test24-added-fn-parms-v0.c \ +test-diff-dwarf/test24-added-fn-parms-v1.c \ +test-diff-dwarf/libtest25-removed-fn-parms-v0.so \ +test-diff-dwarf/libtest25-removed-fn-parms-v1.so \ +test-diff-dwarf/test25-removed-fn-parms-report-0.txt \ +test-diff-dwarf/test25-removed-fn-parms-v0.c \ +test-diff-dwarf/test25-removed-fn-parms-v1.c \ \ test-read-dwarf/test0 \ test-read-dwarf/test0.abi \ diff --git a/tests/data/test-diff-dwarf/libtest24-added-fn-parms-v0.so b/tests/data/test-diff-dwarf/libtest24-added-fn-parms-v0.so new file mode 100755 index 0000000000000000000000000000000000000000..7055b02396ed412c4ac5abe44d0ee3ad89693a03 GIT binary patch literal 8786 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 literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-dwarf/libtest24-added-fn-parms-v1.so b/tests/data/test-diff-dwarf/libtest24-added-fn-parms-v1.so new file mode 100755 index 0000000000000000000000000000000000000000..3e9d6edd44aed43e85f32033146573a94f6838c0 GIT binary patch literal 8922 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 Ay#N3J literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-dwarf/libtest25-removed-fn-parms-v0.so b/tests/data/test-diff-dwarf/libtest25-removed-fn-parms-v0.so new file mode 100755 index 0000000000000000000000000000000000000000..6e347758beada9b4e95425c35fad884a214ea2d3 GIT binary patch literal 8922 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 literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt b/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt new file mode 100644 index 00000000..c1553c11 --- /dev/null +++ b/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt @@ -0,0 +1,12 @@ +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 fun()' has some indirect sub-type changes: + parameter 0 of type 'unsigned int' was added + parameter 1 of type 'char' was added + parameter 2 of type 'int' was added + + + diff --git a/tests/data/test-diff-dwarf/test24-added-fn-parms-v0.c b/tests/data/test-diff-dwarf/test24-added-fn-parms-v0.c new file mode 100644 index 00000000..5a4678e9 --- /dev/null +++ b/tests/data/test-diff-dwarf/test24-added-fn-parms-v0.c @@ -0,0 +1,6 @@ +// To compile this type: +// gcc -g -Wall -shared -o libtest24-added-fn-parms-v0.so test24-added-fn-parms-v0.c +void +fun() +{ +} diff --git a/tests/data/test-diff-dwarf/test24-added-fn-parms-v1.c b/tests/data/test-diff-dwarf/test24-added-fn-parms-v1.c new file mode 100644 index 00000000..1e1eef7c --- /dev/null +++ b/tests/data/test-diff-dwarf/test24-added-fn-parms-v1.c @@ -0,0 +1,13 @@ +// To compile this type: +// gcc -g -Wall -shared -o libtest24-added-fn-parms-v1.so test24-added-fn-parms-v1.c +void +fun() +{ +} + +void +fun(__attribute__((unused))unsigned arg0, + __attribute__((unused)) char arg1, + __attribute__((unused)) int arg2) +{ +} diff --git a/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt b/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt new file mode 100644 index 00000000..24f35d8c --- /dev/null +++ b/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt @@ -0,0 +1,12 @@ +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 fun(unsigned int, char, int)' has some indirect sub-type changes: + parameter 0 of type 'unsigned int' was removed + parameter 1 of type 'char' was removed + parameter 2 of type 'int' was removed + + + diff --git a/tests/data/test-diff-dwarf/test25-removed-fn-parms-v0.c b/tests/data/test-diff-dwarf/test25-removed-fn-parms-v0.c new file mode 100644 index 00000000..b6f66d0d --- /dev/null +++ b/tests/data/test-diff-dwarf/test25-removed-fn-parms-v0.c @@ -0,0 +1,8 @@ +// To compile this type: +// gcc -g -Wall -shared -o libtest25-added-fn-parms-v0.so test25-added-fn-parms-v0.c +void +fun(__attribute__((unused))unsigned arg0, + __attribute__((unused)) char arg1, + __attribute__((unused)) int arg2) +{ +} diff --git a/tests/data/test-diff-dwarf/test25-removed-fn-parms-v1.c b/tests/data/test-diff-dwarf/test25-removed-fn-parms-v1.c new file mode 100644 index 00000000..88be0ea6 --- /dev/null +++ b/tests/data/test-diff-dwarf/test25-removed-fn-parms-v1.c @@ -0,0 +1,6 @@ +// To compile this type: +// gcc -g -Wall -shared -o libtest25-added-fn-parms-v1.so test25-added-fn-parms-v1.c +void +fun() +{ +} diff --git a/tests/test-diff-dwarf.cc b/tests/test-diff-dwarf.cc index 8e33a5fe..04513859 100644 --- a/tests/test-diff-dwarf.cc +++ b/tests/test-diff-dwarf.cc @@ -205,6 +205,18 @@ InOutSpec in_out_specs[] = "data/test-diff-dwarf/libtest-23-diff-arch-v0-64.so", "data/test-diff-dwarf/test-23-diff-arch-report-0.txt", "output/test-diff-dwarf/test-23-diff-arch-report-0.txt" + }, + { + "data/test-diff-dwarf/libtest24-added-fn-parms-v0.so", + "data/test-diff-dwarf/libtest24-added-fn-parms-v1.so", + "data/test-diff-dwarf/test24-added-fn-parms-report-0.txt", + "output/test-diff-dwarf/test24-added-fn-parms-report-0.txt" + }, + { + "data/test-diff-dwarf/libtest25-removed-fn-parms-v0.so", + "data/test-diff-dwarf/libtest25-removed-fn-parms-v1.so", + "data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt", + "output/test-diff-dwarf/test25-removed-fn-parms-report-0.txt" }, // This should be the last entry {NULL, NULL, NULL, NULL}