[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