Bug 27970 - Duplicated member functions cause spurious self comparison changes
Summary: Duplicated member functions cause spurious self comparison changes
Status: RESOLVED FIXED
Alias: None
Product: libabigail
Classification: Unclassified
Component: default (show other bugs)
Version: unspecified
: P2 normal
Target Milestone: ---
Assignee: Dodji Seketeli
URL:
Keywords:
Depends on:
Blocks: 27019
  Show dependency treegraph
 
Reported: 2021-06-08 20:43 UTC by Ben Woodard
Modified: 2021-09-23 11:56 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ben Woodard 2021-06-08 20:43:38 UTC
libstdc++.so.6.0.29 from libstdc++-11.1.1-3.fc34.x86_64 fails self check due to what looks like instability in canonicalization. abidw --abidiff just exits with a 1 error code to actually see the problem you must use abidiff --harmless

$ abidiff --harmless libstdc++.abixml /usr/lib64/libstdc++.so.6.0.29
Functions changes summary: 0 Removed, 4 Changed, 0 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

4 functions with some indirect sub-type change:

  [C] 'method virtual std::__codecvt_abstract_base<char, char, __mbstate_t>::result std::codecvt<char, char, __mbstate_t>::do_out(std::codecvt<char, char, __mbstate_t>::state_type&, const std::codecvt<char, char, __mbstate_t>::intern_type*, const std::codecvt<char, char, __mbstate_t>::intern_type*, const std::codecvt<char, char, __mbstate_t>::intern_type*&, std::codecvt<char, char, __mbstate_t>::extern_type*, std::codecvt<char, char, __mbstate_t>::extern_type*, std::codecvt<char, char, __mbstate_t>::extern_type*&) const' at codecvt.cc:55:1 has some indirect sub-type changes:
    Please note that the symbol of this function is _ZNKSt7codecvtIcc11__mbstate_tE6do_outERS0_PKcS4_RS4_PcS6_RS6_@@GLIBCXX_3.4
     and it aliases symbol: _ZNKSt7codecvtIcc11__mbstate_tE5do_inERS0_PKcS4_RS4_PcS6_RS6_@@GLIBCXX_3.4
    return type changed:
      entity changed from 'typedef std::__codecvt_abstract_base<char, char, __mbstate_t>::result' to compatible type 'enum std::codecvt_base::result' at codecvt.h:52:1

  [C] 'method virtual std::__codecvt_abstract_base<char, char, __mbstate_t>::result std::codecvt<char, char, __mbstate_t>::do_unshift(std::codecvt<char, char, __mbstate_t>::state_type&, std::codecvt<char, char, __mbstate_t>::extern_type*, std::codecvt<char, char, __mbstate_t>::extern_type*, std::codecvt<char, char, __mbstate_t>::extern_type*&) const' at codecvt.cc:70:1 has some indirect sub-type changes:
    Please note that the symbol of this function is _ZNKSt7codecvtIcc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4
     and it aliases symbol: _ZNKSt7codecvtIwc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4
    return type changed:
      entity changed from 'typedef std::__codecvt_abstract_base<char, char, __mbstate_t>::result' to compatible type 'enum std::codecvt_base::result' at codecvt.h:52:1

  [C] 'method virtual std::__codecvt_abstract_base<char16_t, char, __mbstate_t>::result std::codecvt<char16_t, char, __mbstate_t>::do_unshift(std::codecvt<char16_t, char, __mbstate_t>::state_type&, std::codecvt<char16_t, char, __mbstate_t>::extern_type*, std::codecvt<char16_t, char, __mbstate_t>::extern_type*, std::codecvt<char16_t, char, __mbstate_t>::extern_type*&) const' at codecvt.cc:765:1 has some indirect sub-type changes:
    Please note that the symbol of this function is _ZNKSt7codecvtIDsc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4.21
     and it aliases symbols: _ZNKSt19__codecvt_utf8_baseIDsE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt20__codecvt_utf16_baseIDsE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt7codecvtIDic11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt25__codecvt_utf8_utf16_baseIwE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt19__codecvt_utf8_baseIDiE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt20__codecvt_utf16_baseIDiE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt25__codecvt_utf8_utf16_baseIDsE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt20__codecvt_utf16_baseIwE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt25__codecvt_utf8_utf16_baseIDiE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21, _ZNKSt19__codecvt_utf8_baseIwE10do_unshiftER11__mbstate_tPcS3_RS3_@@GLIBCXX_3.4.21
    return type changed:
      entity changed from 'typedef std::__codecvt_abstract_base<char16_t, char, __mbstate_t>::result' to compatible type 'enum std::codecvt_base::result' at codecvt.h:52:1

  [C] 'method virtual std::__codecvt_abstract_base<char16_t, char8_t, __mbstate_t>::result std::codecvt<char16_t, char8_t, __mbstate_t>::do_unshift(std::codecvt<char16_t, char8_t, __mbstate_t>::state_type&, std::codecvt<char16_t, char8_t, __mbstate_t>::extern_type*, std::codecvt<char16_t, char8_t, __mbstate_t>::extern_type*, std::codecvt<char16_t, char8_t, __mbstate_t>::extern_type*&) const' at codecvt.cc:914:1 has some indirect sub-type changes:
    Please note that the symbol of this function is _ZNKSt7codecvtIDsDu11__mbstate_tE10do_unshiftERS0_PDuS3_RS3_@@GLIBCXX_3.4.26
     and it aliases symbol: _ZNKSt7codecvtIDiDu11__mbstate_tE10do_unshiftERS0_PDuS3_RS3_@@GLIBCXX_3.4.26
    return type changed:
      entity changed from 'typedef std::__codecvt_abstract_base<char16_t, char8_t, __mbstate_t>::result' to compatible type 'enum std::codecvt_base::result' at codecvt.h:52:1
Comment 1 Ben Woodard 2021-06-08 20:44:26 UTC
This is with b00ba10e1deae4eae58cb783c01c69f384f392c1
Comment 2 Ben Woodard 2021-09-07 17:46:56 UTC
Yea some progress but not completely fixed with trunk as of 190350a35f842574cf15b9a98f1ccbc3aa31a840 

3 problems down, 1 to go:

$ abidiff --harmless libstdc++.abixml /usr/lib64/libstdc++.so.6.0.29
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] 'method virtual std::__codecvt_abstract_base<char16_t, char8_t, __mbstate_t>::result std::codecvt<char16_t, char8_t, __mbstate_t>::do_unshift(std::codecvt<char16_t, char8_t, __mbstate_t>::state_type&, std::codecvt<char16_t, char8_t, __mbstate_t>::extern_type*, std::codecvt<char16_t, char8_t, __mbstate_t>::extern_type*, std::codecvt<char16_t, char8_t, __mbstate_t>::extern_type*&) const' at codecvt.cc:914:1 has some indirect sub-type changes:
    Please note that the symbol of this function is _ZNKSt7codecvtIDsDu11__mbstate_tE10do_unshiftERS0_PDuS3_RS3_@@GLIBCXX_3.4.26
     and it aliases symbol: _ZNKSt7codecvtIDiDu11__mbstate_tE10do_unshiftERS0_PDuS3_RS3_@@GLIBCXX_3.4.26
    return type changed:
      entity changed from 'typedef std::__codecvt_abstract_base<char16_t, char8_t, __mbstate_t>::result' to compatible type 'enum std::codecvt_base::result' at codecvt.h:52:1
Comment 3 Ben Woodard 2021-09-08 15:02:56 UTC
With the latest trunk as of 7488c8df3bf10750ce059a0ec1d44d8149149c86 this continues to be a problem.
Comment 4 Ben Woodard 2021-09-21 19:35:34 UTC
With the latest trunk as of 1115e3f08e8f30e7e412294a563a78a15d0373c1 this continues to be a problem.
Comment 5 Dodji Seketeli 2021-09-23 11:56:01 UTC
This should be fixed by commit https://sourceware.org/git/?p=libabigail.git;a=commit;h=86a1738d96d0c6e4968be48203175fee0d07a4fc.

The fix should be available in libabigail 2.0.