#!/bin/bash # Copyright (C) 2003-2018 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # You should have received a copy of the GNU Lesser General Public # License along with the GNU C Library; if not, see # . # This script creates a list of data types where each type is followed # by the C++ mangled name for that type. That list is then compared # against the list in the c++-types.data file for the platform being # checked. Any difference between the two would mean that the C++ ABI # had changed and that should not happen even if the change is compatible # at the C language level. # # The list of data types has been created with # cat < # #include # #include # #include # EOF # gcc -D_GNU_SOURCE -E - | # egrep '^typedef.*;$' | # sed 's/^typedef[[:space:]]*//;s/\([[:space:]]\{1,\}__attribute__.*\);/;/;s/.*[[:space:]]\([*]\|\)\(.*\);/\2/' | # egrep -v '^_' | # LC_ALL=C sort -u # data=$1 shift cxx=$(echo $* | sed 's/-fgnu89-inline//') while read t; do echo -n "$t:" $cxx -S -xc++ -o - -D_GNU_SOURCE <(cat < #include #include #include void foo ($t) { } EOF ) | sed 's/[[:space:]]*[.]globa\?l[[:space:]]*_Z3foo\([_[:alnum:]]*\).*/\1/p;d' done <