lvc / abi-compliance-checker

A tool for checking backward API/ABI compatibility of a C/C++ library
https://lvc.github.io/abi-compliance-checker/
GNU Lesser General Public License v2.1
625 stars 77 forks source link

intermittent failures -- spurious warnings #14

Open alexander-buerger-met-no opened 9 years ago

alexander-buerger-met-no commented 9 years ago

While evaluating abi-compliance-checker on a C++ library I get varying results when I run it multiple times on exactly the same input. This basically makes it unusable.

In my case, one function is sometimes reported as having a parameter order change, sometimes not. The function looks like

boost::shared_ptr<A> find(const std::set<boost::shared_ptr<A>, Comp>&, const std::string& key);

When abi-compliance-checker produces an incompatibility warning, it says that the parameter order has changed to

boost::shared_ptr<A> find(const std::set<boost::shared_ptr<A>, Comp>&, const std::string& key);

(i.e. it is not changed at all) but the mangled symbol is actually changed so that c++filt prints

boost::shared_ptr<A> find(const std::set<Comp, boost::shared_ptr<A> >&, const std::string& key);

What changed here is the order of the template parameters for the std::set, not the function parameter order. The mangled symbol with the swapped template parameters only exists in the compat_report.html file (when an error is reported), not in any debug output.

I am using the ubuntu trusty packaged version of abi-compliance-checker.

lvc commented 9 years ago

Hello,

Thanks for reporting the issue. Please try the latest release from master and also try to compare ABI dumps created by the abi-dumper tool (https://github.com/lvc/abi-dumper).

I can try to debug the issue if you'll point me where to download the source code of the problem library.

lvc commented 7 years ago

Please try 2.0 Beta version of the tool from master.

Thank you.