unintended? abi change in ginac 1.7.3
[I'm one of the maintainers of ginac in Fedora] Hi, in recent release, GiNaC::matrix::inverse() const was inlined, which changes the ABI, and there were some other backwards-incompatible changes. See the abi diff report [1], and the bug report where this was discussed [2]. Was this intentional?
================ changes of 'libginac.so.6.0.2'=============== 10 Removed functions: 'method void GiNaC::make_flat_inserter::combine_indices(const GiNaC::exvector&)' {_ZN5GiNaC18make_flat_inserter15combine_indicesERKSt6vectorINS_2exESaIS2_EE} 'method GiNaC::matrix GiNaC::matrix::inverse() const' {_ZNK5GiNaC6matrix7inverseEv} 'function GiNaC::function GiNaC::psi<GiNaC::ex>(const GiNaC::ex&)' {_ZN5GiNaC3psiINS_2exEEENS_8functionERKT_} 'method cln::cl_I& cln::cl_I::operator=(const cln::cl_I&)' {_ZN3cln4cl_IaSERKS0_} 'method cln::cl_N& cln::cl_N::operator=(const cln::cl_N&)' {_ZN3cln4cl_NaSERKS0_} 'method cln::cl_R& cln::cl_R::operator=(const cln::cl_R&)' {_ZN3cln4cl_RaSERKS0_} 'method const cln::cl_MI cln::cl_heap_modint_ring::canonhom(const cln::cl_I&)' {_ZN3cln19cl_heap_modint_ring8canonhomERKNS_4cl_IE} 'method bool cln::cl_heap_modint_ring::equal(const cln::cl_MI&, const cln::cl_MI&)' {_ZN3cln19cl_heap_modint_ring5equalERKNS_5cl_MIES3_} 'method const cln::cl_MI cln::cl_heap_modint_ring::uminus(const cln::cl_MI&)' {_ZN3cln19cl_heap_modint_ring6uminusERKNS_5cl_MIE} 'method bool cln::cl_heap_modint_ring::zerop(const cln::cl_MI&)' {_ZN3cln19cl_heap_modint_ring5zeropERKNS_5cl_MIE}
This is unfortunate, because the interface change requires a rebuild of all dependent packages, but what's worse, the fact that the so version was not changed means that dependent programs might crash instead of just failing to start. Please consider either reverting the abi-breaking changes and releasing 1.7.4, or bumping the so-version of the library (to 7.0.0 most likely) and releasing too… [1] https://bugzilla.redhat.com/attachment.cgi?id=1390882 [2] https://bugzilla.redhat.com/show_bug.cgi?id=1541187 Thanks, Zbyszek
Hi, On 18.02.2018 21:06, Zbigniew Jędrzejewski-Szmek wrote:
in recent release, GiNaC::matrix::inverse() const was inlined, which changes the ABI, and there were some other backwards-incompatible changes. See the abi diff report [1], and the bug report where this was discussed [2]. Was this intentional?
Thanks for reporting a bug. What was intentional is this: To add a new signature matrix::inverse(unsigned) const (1) while retaining the existing matrix::inverse() const (2) as a mere special case of (1), cf. https://www.ginac.de/ginac.git/?p=ginac.git;a=commit;h=1be7026a705dfefedcd83... Why does the compiler not add a (weak) symbol of (2) even though it's declared inline (implicitly)? What's the proper way to handle this common situation? -richy.
participants (2)
-
Richard B. Kreckel
-
Zbigniew Jędrzejewski-Szmek