[Bug libstdc++/87822] New: [regression 6/7/8/9] Binary incompatibility in std::pair introduced by PR 86751

romain.geissler at amadeus dot com gcc-bugzilla@gcc.gnu.org
Wed Oct 31 00:11:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822

            Bug ID: 87822
           Summary: [regression 6/7/8/9] Binary incompatibility in
                    std::pair introduced by PR 86751
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: romain.geissler at amadeus dot com
  Target Milestone: ---

Hi,

I am having core dumps when mixing libraries built with gcc 6.4.1 and the final
gcc 6.5.0 (I know gcc 6 branch is closed, but since the incompatibility is
about a std::pair type that is quite commonly used I guess this is still
valid). You have the exact same incompatibility with early gcc 7 vs newest gcc
7, early gcc 8 vs newest gcc 8.

See this simple snippet that builds fine with both gcc 6.4 and 6.5 shows the
change of type size (on x64):

#include <utility>
#include <string>

#if __GNUC__ == 6 && __GNUC_MINOR__ <= 4
static_assert(sizeof(std::pair<std::pair<std::string, std::string>,
std::string>) == 96, "");
#elif __GNUC__ == 6 && __GNUC_MINOR__ >= 5
static_assert(sizeof(std::pair<std::pair<std::string, std::string>,
std::string>) == 104, ""); // Size of type changed with r265162
#endif 


Shall we revert PR 86751 or find another way to fix it (introduce a new tagged
std::pair type and provide dual abi ?).

Cheers,
Romain


More information about the Gcc-bugs mailing list