diff --git a/gcc.spec b/gcc.spec
index 4877961..64130fc 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,10 +1,10 @@
-%global DATE 20221121
-%global gitrev b3f5a0d53b84ed27cf00cfa2b9c3e2c78935c07d
-%global gcc_version 12.2.1
-%global gcc_major 12
+%global DATE 20230115
+%global gitrev 7699a0a3101bf1315fb8e350ac718d1f7b3f7816
+%global gcc_version 13.0.0
+%global gcc_major 13
# Note, gcc_release must be integer, if you want to add suffixes to
# %%{release}, append them after %%{gcc_release} on Release: line.
-%global gcc_release 4
+%global gcc_release 0
%global nvptx_tools_gitrev 472b6e78b3ba918d727698f79911360b7c808247
%global newlib_cygwin_gitrev a8526cb52bedabd4d6ba4b227a5185627f871aa1
%global _unpackaged_files_terminate_build 0
@@ -34,6 +34,7 @@
%global build_objc 0
%global build_go 0
%global build_d 0
+%global build_m2 0
%else
%ifarch %{ix86} x86_64 ia64 ppc %{power64} alpha s390x %{arm} aarch64 riscv64
%global build_ada 1
@@ -51,6 +52,11 @@
%else
%global build_d 0
%endif
+%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} riscv64
+%global build_m2 1
+%else
+%global build_m2 0
+%endif
%endif
%ifarch %{ix86} x86_64 ia64 ppc64le
%global build_libquadmath 1
@@ -62,6 +68,11 @@
%else
%global build_libasan 0
%endif
+%ifarch x86_64 aarch64
+%global build_libhwasan 1
+%else
+%global build_libhwasan 0
+%endif
%ifarch x86_64 ppc64 ppc64le aarch64 s390x
%global build_libtsan 1
%else
@@ -125,7 +136,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}%{?dist}
+Release: %{gcc_release}.9%{?dist}
# libgcc, libgfortran, libgomp, libstdc++ and crtstuff have
# GCC Runtime Exception.
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
@@ -264,23 +275,27 @@ Provides: bundled(libbacktrace)
Provides: bundled(libffi)
Provides: gcc(major) = %{gcc_major}
-Patch0: gcc12-hack.patch
-Patch2: gcc12-sparc-config-detection.patch
-Patch3: gcc12-libgomp-omp_h-multilib.patch
-Patch4: gcc12-libtool-no-rpath.patch
-Patch5: gcc12-isl-dl.patch
-Patch6: gcc12-isl-dl2.patch
-Patch7: gcc12-libstdc++-docs.patch
-Patch8: gcc12-no-add-needed.patch
-Patch9: gcc12-Wno-format-security.patch
-Patch10: gcc12-rh1574936.patch
-Patch11: gcc12-d-shared-libphobos.patch
-Patch12: gcc12-pr107468.patch
-
-Patch100: gcc12-fortran-fdec-duplicates.patch
-Patch101: gcc12-fortran-flogical-as-integer.patch
-Patch102: gcc12-fortran-fdec-override-kind.patch
-Patch103: gcc12-fortran-fdec-non-logical-if.patch
+Patch0: gcc13-hack.patch
+Patch2: gcc13-sparc-config-detection.patch
+Patch3: gcc13-libgomp-omp_h-multilib.patch
+Patch4: gcc13-libtool-no-rpath.patch
+Patch5: gcc13-isl-dl.patch
+Patch6: gcc13-isl-dl2.patch
+Patch7: gcc13-libstdc++-docs.patch
+Patch8: gcc13-no-add-needed.patch
+Patch9: gcc13-Wno-format-security.patch
+Patch10: gcc13-rh1574936.patch
+Patch11: gcc13-d-shared-libphobos.patch
+Patch12: gcc13-pr107678.patch
+Patch13: gcc13-pr107608.patch
+Patch14: gcc13-pr108411.patch
+
+Patch50: isl-rh2155127.patch
+
+Patch100: gcc13-fortran-fdec-duplicates.patch
+Patch101: gcc13-fortran-flogical-as-integer.patch
+Patch102: gcc13-fortran-fdec-override-kind.patch
+Patch103: gcc13-fortran-fdec-non-logical-if.patch
# On ARM EABI systems, we do want -gnueabi to be part of the
# target triple.
@@ -302,7 +317,7 @@ Patch103: gcc12-fortran-fdec-non-logical-if.patch
%if %{build_go}
# Avoid stripping these libraries and binaries.
%global __os_install_post \
-chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.21.* \
+chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.22.* \
chmod 644 %{buildroot}%{_prefix}/bin/go.gcc \
chmod 644 %{buildroot}%{_prefix}/bin/gofmt.gcc \
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo \
@@ -310,7 +325,7 @@ chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/test2json \
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/vet \
%__os_install_post \
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.21.* \
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.22.* \
chmod 755 %{buildroot}%{_prefix}/bin/go.gcc \
chmod 755 %{buildroot}%{_prefix}/bin/gofmt.gcc \
chmod 755 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo \
@@ -321,11 +336,11 @@ chmod 755 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
%endif
%description
-The gcc package contains the GNU Compiler Collection version 12.
+The gcc package contains the GNU Compiler Collection version 13.
You'll need this package in order to compile C code.
%package -n libgcc
-Summary: GCC version 12 shared support library
+Summary: GCC version 13 shared support library
Autoreq: false
%if !%{build_ada}
Obsoletes: libgnat < %{version}-%{release}
@@ -365,6 +380,7 @@ including templates and exception handling.
Summary: GNU Standard C++ Library
Autoreq: true
Requires: glibc >= 2.10.90-7
+Requires: tzdata >= 2017c
%description -n libstdc++
The libstdc++ package contains a rewritten standard compliant GCC Standard
@@ -489,6 +505,34 @@ Requires: gcc-gdc = %{version}-%{release}
%description -n libgphobos-static
This package contains static D libraries.
+%package gm2
+Summary: Modula-2 support
+Requires: gcc = %{version}-%{release}
+Requires: libgm2 = %{version}-%{release}
+Provides: gcc-m2 = %{version}-%{release}
+Provides: gm2 = %{version}-%{release}
+Autoreq: true
+
+%description gm2
+The gcc-gm2 package provides support for compiling Modula-2
+programs with the GNU Compiler Collection.
+
+%package -n libgm2
+Summary: Modula-2 runtime
+Autoreq: true
+
+%description -n libgm2
+This package contains Modula-2 shared libraries which are needed to run
+Modula-2 dynamically linked programs.
+
+%package -n libgm2-static
+Summary: Static Modula-2 libraries
+Requires: libgm2 = %{version}-%{release}
+Requires: gcc-gm2 = %{version}-%{release}
+
+%description -n libgm2-static
+This package contains static Modula-2 libraries.
+
%package -n libgomp
Summary: GCC OpenMP v4.5 shared support library
@@ -607,6 +651,21 @@ Requires: libasan = %{version}-%{release}
%description -n libasan-static
This package contains Address Sanitizer static runtime library.
+%package -n libhwasan
+Summary: The Hardware-assisted Address Sanitizer runtime library
+
+%description -n libhwasan
+This package contains the Hardware-assisted Address Sanitizer library
+which is used for -fsanitize=hwaddress instrumented programs.
+
+%package -n libhwasan-static
+Summary: The Hardware-assisted Address Sanitizer static library
+Requires: libhwasan = %{version}-%{release}
+
+%description -n libhwasan-static
+This package contains Hardware-assisted Address Sanitizer static runtime
+library.
+
%package -n libtsan
Summary: The Thread Sanitizer runtime library
@@ -803,7 +862,12 @@ so that there cannot be any synchronization problems.
%patch10 -p0 -b .rh1574936~
%endif
%patch11 -p0 -b .d-shared-libphobos~
-%patch12 -p0 -b .pr107468~
+%patch12 -p0 -b .pr107678~
+%patch13 -p0 -b .pr107608~
+%patch14 -p0 -b .pr108411~
+
+%patch50 -p0 -b .rh2155127~
+touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4
%if 0%{?rhel} >= 9
%patch100 -p1 -b .fortran-fdec-duplicates~
@@ -856,11 +920,13 @@ export CONFIG_SITE=NONE
CC=gcc
CXX=g++
-OPT_FLAGS=`echo %{optflags}|sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g'`
+OPT_FLAGS=`echo %{optflags}|sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[123]//g'`
+OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/\(-Wp,\)\?-U_FORTIFY_SOURCE//g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-flto=auto//g;s/-flto//g;s/-ffat-lto-objects//g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-m64//g;s/-m32//g;s/-m31//g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/ -pipe / /g'`
+OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-fno-omit-frame-pointer //g;s/-mbackchain //g;s/-mno-omit-leaf-frame-pointer //g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-Werror=format-security/-Wformat-security/g'`
%ifarch sparc
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcpu=ultrasparc/-mtune=ultrasparc/g;s/-mcpu=v[78]//g'`
@@ -923,7 +989,7 @@ ISL_FLAG_PIC=-fPIC
ISL_FLAG_PIC=-fpic
%endif
cd isl-build
-sed -i 's|libisl\([^-]\)|libgcc12privateisl\1|g' \
+sed -i 's|libisl\([^-]\)|libgcc13privateisl\1|g' \
../../isl-%{isl_version}/Makefile.{am,in}
../../isl-%{isl_version}/configure \
CC=/usr/bin/gcc CXX=/usr/bin/g++ \
@@ -931,8 +997,8 @@ sed -i 's|libisl\([^-]\)|libgcc12privateisl\1|g' \
make %{?_smp_mflags}
make install
cd ../isl-install/lib
-rm libgcc12privateisl.so{,.23}
-mv libgcc12privateisl.so.23.1.0 libisl.so.23
+rm libgcc13privateisl.so{,.23}
+mv libgcc13privateisl.so.23.1.0 libisl.so.23
ln -sf libisl.so.23 libisl.so
cd ../..
%endif
@@ -953,6 +1019,9 @@ enablelgo=,go
%if %{build_d}
enableld=,d
%endif
+%if %{build_m2}
+enablelm2=,m2
+%endif
CONFIGURE_OPTS="\
--prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \
--with-bugurl=http://bugzilla.redhat.com/bugzilla \
@@ -975,7 +1044,7 @@ CONFIGURE_OPTS="\
%endif
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \
--enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only \
- --enable-libstdcxx-backtrace \
+ --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=%{_datadir}/zoneinfo \
%ifnarch %{mips}
--with-linker-hash-style=gnu \
%endif
@@ -1107,7 +1176,7 @@ CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \
| sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \
XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \
../configure --enable-bootstrap \
- --enable-languages=c,c++,fortran${enablelobjc}${enablelada}${enablelgo}${enableld},lto \
+ --enable-languages=c,c++,fortran${enablelobjc}${enablelada}${enablelgo}${enableld}${enablelm2},lto \
$CONFIGURE_OPTS
%ifarch sparc sparcv9 sparc64
@@ -1163,7 +1232,7 @@ cd ../..
# Copy various doc files here and there
cd ..
-mkdir -p rpm.doc/gfortran rpm.doc/objc rpm.doc/gdc rpm.doc/libphobos
+mkdir -p rpm.doc/{gfortran,objc,gdc,libphobos,gm2,libgm2}
mkdir -p rpm.doc/go rpm.doc/libgo rpm.doc/libquadmath rpm.doc/libitm
mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/ada,gcc/jit,libstdc++-v3,libobjc,libgomp,libcc1,libatomic,libsanitizer}
@@ -1191,6 +1260,14 @@ done)
done
cp -a src/LICENSE*.txt libdruntime/LICENSE.txt ../rpm.doc/libphobos/)
%endif
+%if %{build_m2}
+(cd gcc/m2; for i in ChangeLog*; do
+ cp -p $i ../../rpm.doc/gm2/$i.gm2
+done)
+(cd libgm2; for i in ChangeLog*; do
+ cp -p $i ../rpm.doc/libgm2/$i.libgm2
+done)
+%endif
%if %{build_libquadmath}
(cd libquadmath; for i in ChangeLog* COPYING.LIB; do
cp -p $i ../rpm.doc/libquadmath/$i.libquadmath
@@ -1488,14 +1565,19 @@ ln -sf ../../../libstdc++.so.6.*[0-9] libstdc++.so
ln -sf ../../../libgfortran.so.5.* libgfortran.so
ln -sf ../../../libgomp.so.1.* libgomp.so
%if %{build_go}
-ln -sf ../../../libgo.so.21.* libgo.so
+ln -sf ../../../libgo.so.22.* libgo.so
%endif
%if %{build_libquadmath}
ln -sf ../../../libquadmath.so.0.* libquadmath.so
%endif
%if %{build_d}
-ln -sf ../../../libgdruntime.so.3.* libgdruntime.so
-ln -sf ../../../libgphobos.so.3.* libgphobos.so
+ln -sf ../../../libgdruntime.so.4.* libgdruntime.so
+ln -sf ../../../libgphobos.so.4.* libgphobos.so
+%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ ln -sf ../../../libm2$i.so.18.* libm2$i.so
+done
%endif
%if %{build_libitm}
ln -sf ../../../libitm.so.1.* libitm.so
@@ -1518,14 +1600,19 @@ ln -sf ../../../../%{_lib}/libstdc++.so.6.*[0-9] libstdc++.so
ln -sf ../../../../%{_lib}/libgfortran.so.5.* libgfortran.so
ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so
%if %{build_go}
-ln -sf ../../../../%{_lib}/libgo.so.21.* libgo.so
+ln -sf ../../../../%{_lib}/libgo.so.22.* libgo.so
%endif
%if %{build_libquadmath}
ln -sf ../../../../%{_lib}/libquadmath.so.0.* libquadmath.so
%endif
%if %{build_d}
-ln -sf ../../../../%{_lib}/libgdruntime.so.3.* libgdruntime.so
-ln -sf ../../../../%{_lib}/libgphobos.so.3.* libgphobos.so
+ln -sf ../../../../%{_lib}/libgdruntime.so.4.* libgdruntime.so
+ln -sf ../../../../%{_lib}/libgphobos.so.4.* libgphobos.so
+%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ ln -sf ../../../../%{_lib}/libm2$i.so.18.* libm2$i.so
+done
%endif
%if %{build_libitm}
ln -sf ../../../../%{_lib}/libitm.so.1.* libitm.so
@@ -1545,6 +1632,11 @@ rm -f libtsan.so
echo 'INPUT ( %{_prefix}/%{_lib}/'`echo ../../../../%{_lib}/libtsan.so.2.* | sed 's,^.*libt,libt,'`' )' > libtsan.so
mv ../../../../%{_lib}/libtsan_preinit.o libtsan_preinit.o
%endif
+%if %{build_libhwasan}
+rm -f libhwasan.so
+echo 'INPUT ( %{_prefix}/%{_lib}/'`echo ../../../../%{_lib}/libhwasan.so.0.* | sed 's,^.*libh,libh,'`' )' > libhwasan.so
+mv ../../../../%{_lib}/libhwasan_preinit.o libhwasan_preinit.o
+%endif
%if %{build_liblsan}
rm -f liblsan.so
echo 'INPUT ( %{_prefix}/%{_lib}/'`echo ../../../../%{_lib}/liblsan.so.0.* | sed 's,^.*libl,libl,'`' )' > liblsan.so
@@ -1553,6 +1645,7 @@ mv ../../../../%{_lib}/liblsan_preinit.o liblsan_preinit.o
fi
mv -f %{buildroot}%{_prefix}/%{_lib}/libstdc++.*a $FULLLPATH/
mv -f %{buildroot}%{_prefix}/%{_lib}/libstdc++fs.*a $FULLLPATH/
+mv -f %{buildroot}%{_prefix}/%{_lib}/libstdc++exp.*a $FULLLPATH/
mv -f %{buildroot}%{_prefix}/%{_lib}/libstdc++_libbacktrace.*a $FULLLPATH/
mv -f %{buildroot}%{_prefix}/%{_lib}/libsupc++.*a $FULLLPATH/
mv -f %{buildroot}%{_prefix}/%{_lib}/libgfortran.*a $FULLLPATH/
@@ -1567,6 +1660,14 @@ mv -f %{buildroot}%{_prefix}/%{_lib}/libquadmath.*a $FULLLPATH/
mv -f %{buildroot}%{_prefix}/%{_lib}/libgdruntime.*a $FULLLPATH/
mv -f %{buildroot}%{_prefix}/%{_lib}/libgphobos.*a $FULLLPATH/
%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ mv -f %{buildroot}%{_prefix}/%{_lib}/libm2$i.*a $FULLLPATH/
+ rm -f m2/m2$i/*.{a,la}
+ ln -sf ../../libm2$i.so m2/m2$i/
+ ln -sf ../../libm2$i.a m2/m2$i/
+done
+%endif
%if %{build_libitm}
mv -f %{buildroot}%{_prefix}/%{_lib}/libitm.*a $FULLLPATH/
%endif
@@ -1582,6 +1683,9 @@ mv -f %{buildroot}%{_prefix}/%{_lib}/libubsan.*a $FULLLPATH/
%if %{build_libtsan}
mv -f %{buildroot}%{_prefix}/%{_lib}/libtsan.*a $FULLPATH/
%endif
+%if %{build_libhwasan}
+mv -f %{buildroot}%{_prefix}/%{_lib}/libhwasan.*a $FULLPATH/
+%endif
%if %{build_liblsan}
mv -f %{buildroot}%{_prefix}/%{_lib}/liblsan.*a $FULLPATH/
%endif
@@ -1639,8 +1743,8 @@ ln -sf ../`echo ../../../../lib/libgfortran.so.5.* | sed s~/lib/~/lib64/~` 64/li
ln -sf ../`echo ../../../../lib/libgomp.so.1.* | sed s~/lib/~/lib64/~` 64/libgomp.so
%if %{build_go}
rm -f libgo.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.21.* | sed 's,^.*libg,libg,'`' )' > libgo.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.21.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.22.* | sed 's,^.*libg,libg,'`' )' > libgo.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.22.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so
%endif
%if %{build_libquadmath}
rm -f libquadmath.so
@@ -1649,10 +1753,20 @@ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libquadmath.so.0.* | sed '
%endif
%if %{build_d}
rm -f libgdruntime.so libgphobos.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgdruntime.so.3.* | sed 's,^.*libg,libg,'`' )' > libgdruntime.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgdruntime.so.3.* | sed 's,^.*libg,libg,'`' )' > 64/libgdruntime.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgphobos.so.3.* | sed 's,^.*libg,libg,'`' )' > libgphobos.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgphobos.so.3.* | sed 's,^.*libg,libg,'`' )' > 64/libgphobos.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgdruntime.so.4.* | sed 's,^.*libg,libg,'`' )' > libgdruntime.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgdruntime.so.4.* | sed 's,^.*libg,libg,'`' )' > 64/libgdruntime.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgphobos.so.4.* | sed 's,^.*libg,libg,'`' )' > libgphobos.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgphobos.so.4.* | sed 's,^.*libg,libg,'`' )' > 64/libgphobos.so
+%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ rm -f libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libm2$i.so.18.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libm2$i.so.18.* | sed 's,^.*libm,libm,'`' )' > 64/libm2$i.so
+ rm -f 64/m2/m2$i/*.{a,la}
+ ln -sf ../../libm2$i.so 64/m2/m2$i/
+ ln -sf ../../libm2$i.a 64/m2/m2$i/
+done
%endif
%if %{build_libitm}
rm -f libitm.so
@@ -1685,6 +1799,8 @@ ln -sf lib32/libstdc++.a libstdc++.a
ln -sf ../lib64/libstdc++.a 64/libstdc++.a
ln -sf lib32/libstdc++fs.a libstdc++fs.a
ln -sf ../lib64/libstdc++fs.a 64/libstdc++fs.a
+ln -sf lib32/libstdc++exp.a libstdc++exp.a
+ln -sf ../lib64/libstdc++exp.a 64/libstdc++exp.a
ln -sf lib32/libstdc++_libbacktrace.a libstdc++_libbacktrace.a
ln -sf ../lib64/libstdc++_libbacktrace.a 64/libstdc++_libbacktrace.a
ln -sf lib32/libsupc++.a libsupc++.a
@@ -1699,6 +1815,12 @@ ln -sf ../lib64/libgdruntime.a 64/libgdruntime.a
ln -sf lib32/libgphobos.a libgphobos.a
ln -sf ../lib64/libgphobos.a 64/libgphobos.a
%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ ln -sf lib32/libm2$i.a libm2$i.a
+ ln -sf ../lib64/libm2$i.a 64/libm2$i.a
+done
+%endif
%if %{build_libitm}
ln -sf lib32/libitm.a libitm.a
ln -sf ../lib64/libitm.a 64/libitm.a
@@ -1740,8 +1862,8 @@ ln -sf ../`echo ../../../../lib64/libgfortran.so.5.* | sed s~/../lib64/~/~` 32/l
ln -sf ../`echo ../../../../lib64/libgomp.so.1.* | sed s~/../lib64/~/~` 32/libgomp.so
%if %{build_go}
rm -f libgo.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.21.* | sed 's,^.*libg,libg,'`' )' > libgo.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.21.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.22.* | sed 's,^.*libg,libg,'`' )' > libgo.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.22.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so
%endif
%if %{build_libquadmath}
rm -f libquadmath.so
@@ -1750,10 +1872,20 @@ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libquadmath.so.0.* | sed '
%endif
%if %{build_d}
rm -f libgdruntime.so libgphobos.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgdruntime.so.3.* | sed 's,^.*libg,libg,'`' )' > libgdruntime.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgdruntime.so.3.* | sed 's,^.*libg,libg,'`' )' > 32/libgdruntime.so
-echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgphobos.so.3.* | sed 's,^.*libg,libg,'`' )' > libgphobos.so
-echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgphobos.so.3.* | sed 's,^.*libg,libg,'`' )' > 32/libgphobos.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgdruntime.so.4.* | sed 's,^.*libg,libg,'`' )' > libgdruntime.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgdruntime.so.4.* | sed 's,^.*libg,libg,'`' )' > 32/libgdruntime.so
+echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgphobos.so.4.* | sed 's,^.*libg,libg,'`' )' > libgphobos.so
+echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgphobos.so.4.* | sed 's,^.*libg,libg,'`' )' > 32/libgphobos.so
+%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ rm -f libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libm2$i.so.18.* | sed 's,^.*libm,libm,'`' )' > libm2$i.so
+ echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libm2$i.so.18.* | sed 's,^.*libm,libm,'`' )' > 32/libm2$i.so
+ rm -f 32/m2/m2$i/*.{a,la}
+ ln -sf ../../libm2$i.so 32/m2/m2$i/
+ ln -sf ../../libm2$i.a 32/m2/m2$i/
+done
%endif
%if %{build_libitm}
rm -f libitm.so
@@ -1788,6 +1920,8 @@ ln -sf ../lib32/libstdc++.a 32/libstdc++.a
ln -sf lib64/libstdc++.a libstdc++.a
ln -sf ../lib32/libstdc++fs.a 32/libstdc++fs.a
ln -sf lib64/libstdc++fs.a libstdc++fs.a
+ln -sf ../lib32/libstdc++exp.a 32/libstdc++exp.a
+ln -sf lib64/libstdc++exp.a libstdc++exp.a
ln -sf ../lib32/libstdc++_libbacktrace.a 32/libstdc++_libbacktrace.a
ln -sf lib64/libstdc++_libbacktrace.a libstdc++_libbacktrace.a
ln -sf ../lib32/libsupc++.a 32/libsupc++.a
@@ -1802,6 +1936,12 @@ ln -sf lib64/libgdruntime.a libgdruntime.a
ln -sf ../lib32/libgphobos.a 32/libgphobos.a
ln -sf lib64/libgphobos.a libgphobos.a
%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ ln -sf ../lib32/libm2$i.a 32/libm2$i.a
+ ln -sf lib64/libm2$i.a libm2$i.a
+done
+%endif
%if %{build_libitm}
ln -sf ../lib32/libitm.a 32/libitm.a
ln -sf lib64/libitm.a libitm.a
@@ -1837,6 +1977,7 @@ ln -sf lib64/adalib adalib
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libgfortran.a 32/libgfortran.a
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libstdc++.a 32/libstdc++.a
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libstdc++fs.a 32/libstdc++fs.a
+ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libstdc++exp.a 32/libstdc++exp.a
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libstdc++_libbacktrace.a 32/libstdc++_libbacktrace.a
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libsupc++.a 32/libsupc++.a
%if %{build_libquadmath}
@@ -1846,6 +1987,11 @@ ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libqua
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libgdruntime.a 32/libgdruntime.a
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libgphobos.a 32/libgphobos.a
%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libm2$i.a 32/libm2$i.a
+done
+%endif
%if %{build_libitm}
ln -sf ../../../%{multilib_32_arch}-%{_vendor}-%{_target_os}/%{gcc_major}/libitm.a 32/libitm.a
%endif
@@ -1884,8 +2030,9 @@ for d in . $FULLLSUBDIR; do
-o -name libgolibbegin.a -o -name libgomp.a \
-o -name libitm.a -o -name liblsan.a \
-o -name libobjc.a -o -name libgdruntime.a -o -name libgphobos.a \
- -o -name libquadmath.a -o -name libstdc++.a \
- -o -name libstdc++fs.a -o -name libstdc++_libbacktrace.a -o -name libsupc++.a \
+ -o -name libm2\*.a -o -name libquadmath.a -o -name libstdc++.a \
+ -o -name libstdc++fs.a -o -name libstdc++exp.a \
+ -o -name libstdc++_libbacktrace.a -o -name libsupc++.a \
-o -name libtsan.a -o -name libubsan.a \) -a -type f`; do
cp -a $f $RPM_BUILD_ROOT%{_prefix}/lib/debug%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/$d/
done
@@ -1895,7 +2042,7 @@ done
# Strip debug info from Fortran/ObjC/Java static libraries
strip -g `find . \( -name libgfortran.a -o -name libobjc.a -o -name libgomp.a \
-o -name libgcc.a -o -name libgcov.a -o -name libquadmath.a \
- -o -name libgdruntime.a -o -name libgphobos.a \
+ -o -name libgdruntime.a -o -name libgphobos.a -o -name libm2\*.a \
-o -name libitm.a -o -name libgo.a -o -name libcaf\*.a \
-o -name libatomic.a -o -name libasan.a -o -name libtsan.a \
-o -name libubsan.a -o -name liblsan.a -o -name libcc1.a \) \
@@ -1908,8 +2055,13 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libcc1.so.0.*
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libquadmath.so.0.*
%endif
%if %{build_d}
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgdruntime.so.3.*
-chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgphobos.so.3.*
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgdruntime.so.4.*
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgphobos.so.4.*
+%endif
+%if %{build_m2}
+for i in cor iso log min pim; do
+ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libm2$i.so.18.*
+done
%endif
%if %{build_libitm}
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libitm.so.1.*
@@ -1926,12 +2078,15 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libubsan.so.1.*
%if %{build_libtsan}
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libtsan.so.2.*
%endif
+%if %{build_libhwasan}
+chmod 755 %{buildroot}%{_prefix}/%{_lib}/libhwasan.so.0.*
+%endif
%if %{build_liblsan}
chmod 755 %{buildroot}%{_prefix}/%{_lib}/liblsan.so.0.*
%endif
%if %{build_go}
# Avoid stripping these libraries and binaries.
-chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.21.*
+chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.22.*
chmod 644 %{buildroot}%{_prefix}/bin/go.gcc
chmod 644 %{buildroot}%{_prefix}/bin/gofmt.gcc
chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo
@@ -1948,8 +2103,6 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgnarl*so*
chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgnat*so*
%endif
-mv $FULLPATH/include-fixed/syslimits.h $FULLPATH/include/syslimits.h
-mv $FULLPATH/include-fixed/limits.h $FULLPATH/include/limits.h
for h in `find $FULLPATH/include -name \*.h`; do
if grep -q 'It has been auto-edited by fixincludes from' $h; then
rh=`grep -A2 'It has been auto-edited by fixincludes from' $h | tail -1 | sed 's|^.*"\(.*\)".*$|\1|'`
@@ -2002,6 +2155,7 @@ rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcc-ar || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcc-nm || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gcc-ranlib || :
rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gdc || :
+rm -f %{buildroot}%{_prefix}/bin/%{_target_platform}-gm2 || :
%ifarch %{multilib_64_archs}
# Remove libraries for the other arch on multilib arches
@@ -2141,6 +2295,8 @@ end
%ldconfig_scriptlets -n libgphobos
+%ldconfig_scriptlets -n libgm2
+
%ldconfig_scriptlets -n libgnat
%ldconfig_scriptlets -n libgomp
@@ -2322,6 +2478,13 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/mwaitintrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512fp16intrin.h
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avx512fp16vlintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avxifmaintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avxvnniint8intrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/avxneconvertintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/cmpccxaddintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/amxfp16intrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/prfchiintrin.h
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/raointintrin.h
%endif
%ifarch ia64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/ia64intrin.h
@@ -2497,6 +2660,10 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libtsan.so
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libtsan_preinit.o
%endif
+%if %{build_libhwasan}
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libhwasan.so
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libhwasan_preinit.o
+%endif
%if %{build_liblsan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/liblsan.so
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/liblsan_preinit.o
@@ -2540,6 +2707,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libstdc++.so
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libstdc++.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libstdc++fs.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libstdc++exp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libstdc++_libbacktrace.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libsupc++.a
%endif
@@ -2548,6 +2716,7 @@ end
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libstdc++.so
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libstdc++.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libstdc++fs.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libstdc++exp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libstdc++_libbacktrace.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libsupc++.a
%endif
@@ -2557,6 +2726,7 @@ end
%ifarch sparcv9 sparc64 ppc ppc64 ppc64p7
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++fs.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++exp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++_libbacktrace.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libsupc++.a
%endif
@@ -2590,15 +2760,18 @@ end
%ifarch sparcv9 ppc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32/libstdc++fs.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32/libstdc++exp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32/libstdc++_libbacktrace.a
%endif
%ifarch sparc64 ppc64 ppc64p7
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64/libstdc++fs.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64/libstdc++exp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64/libstdc++_libbacktrace.a
%endif
%ifnarch sparcv9 sparc64 ppc ppc64 ppc64p7
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++fs.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++exp.a
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libstdc++_libbacktrace.a
%endif
%doc rpm.doc/changelogs/libstdc++-v3/ChangeLog* libstdc++-v3/README*
@@ -2770,8 +2943,8 @@ end
%doc rpm.doc/gdc/*
%files -n libgphobos
-%{_prefix}/%{_lib}/libgdruntime.so.3*
-%{_prefix}/%{_lib}/libgphobos.so.3*
+%{_prefix}/%{_lib}/libgdruntime.so.4*
+%{_prefix}/%{_lib}/libgphobos.so.4*
%doc rpm.doc/libphobos/*
%files -n libgphobos-static
@@ -2794,6 +2967,59 @@ end
%endif
%endif
+%if %{build_m2}
+%files gm2
+%{_prefix}/bin/gm2
+%{_mandir}/man1/gm2.1*
+%dir %{_prefix}/lib/gcc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
+%dir %{_prefix}/libexec/gcc
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}
+%dir %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/m2
+%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cc1gm2
+%ifarch sparcv9 sparc64 ppc ppc64 ppc64p7
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libm2*.a
+%endif
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libm2*.so
+%ifarch sparcv9 ppc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/m2
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libm2*.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/libm2*.so
+%endif
+%ifarch %{multilib_64_archs}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/m2
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libm2*.a
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/32/libm2*.so
+%endif
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin/m2rte.so
+%doc rpm.doc/gm2/*
+
+%files -n libgm2
+%{_prefix}/%{_lib}/libm2*.so.18*
+%doc rpm.doc/libgm2/*
+
+%files -n libgm2-static
+%dir %{_prefix}/lib/gcc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
+%ifarch sparcv9 ppc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib32/libm2*.a
+%endif
+%ifarch sparc64 ppc64 ppc64p7
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/lib64/libm2*.a
+%endif
+%ifnarch sparcv9 sparc64 ppc ppc64 ppc64p7
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libm2*.a
+%endif
+%endif
+
%if %{build_ada}
%files gnat
%{_prefix}/bin/gnat
@@ -3036,6 +3262,20 @@ end
%license libsanitizer/LICENSE.TXT
%endif
+%if %{build_libhwasan}
+%files -n libhwasan
+%{_prefix}/%{_lib}/libhwasan.so.0*
+
+%files -n libhwasan-static
+%dir %{_prefix}/lib/gcc
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}
+%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libhwasan.a
+%doc rpm.doc/changelogs/libsanitizer/ChangeLog*
+%{!?_licensedir:%global license %%doc}
+%license libsanitizer/LICENSE.TXT
+%endif
+
%if %{build_liblsan}
%files -n liblsan
%{_prefix}/%{_lib}/liblsan.so.0*
@@ -3096,7 +3336,7 @@ end
%doc rpm.doc/go/*
%files -n libgo
-%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.21*
+%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.22*
%doc rpm.doc/libgo/*
%files -n libgo-devel
@@ -3215,461 +3455,5 @@ end
%endif
%changelog
-* Mon Nov 21 2022 Jakub Jelinek 12.2.1-4
-- update from releases/gcc-12 branch
- - PRs c++/104066, c++/105774, c++/106829, c++/107358, c/41041, c/106981,
- c/107001, libstdc++/95048, libstdc++/103295, target/104688,
- target/107183, target/107304, target/107404, target/107713,
- target/107748, tree-optimization/107121, tree-optimization/107206
-- fix up std::from_chars behavior in rounding modes other than FE_TONEAREST
- (PR libstdc++/107468)
-
-* Thu Nov 3 2022 Jakub Jelinek 12.2.1-3
-- update from releases/gcc-12 branch
- - PRs c++/93259, c++/105774, c++/106759, c++/106829, c++/106893, c++/106925,
- c++/107358, c/106947, c/106981, c/107001, fortran/82868,
- fortran/100029, fortran/100040, fortran/100097, fortran/100098,
- fortran/100103, fortran/100132, fortran/100136, fortran/100245,
- fortran/103413, fortran/103694, fortran/105012, fortran/105633,
- fortran/106566, fortran/106579, fortran/106817, fortran/106857,
- fortran/106985, fortran/106986, fortran/107054, libstdc++/105678,
- libstdc++/106320, libstdc++/106589, libstdc++/106607,
- libstdc++/106695, lto/107418, middle-end/106548, middle-end/106982,
- other/106782, rtl-optimization/106187, target/96072, target/99184,
- target/99685, target/100645, target/101322, target/103353,
- target/104482, target/105421, target/105463, target/105485,
- target/106017, target/106355, target/106459, target/106491,
- target/106524, target/106704, target/106714, target/106721,
- target/107061, target/107064, target/107248, target/107364,
- tree-optimization/102892, tree-optimization/105937,
- tree-optimization/106322, tree-optimization/106809,
- tree-optimization/106841, tree-optimization/106860,
- tree-optimization/106892, tree-optimization/106922,
- tree-optimization/106934, tree-optimization/107107,
- tree-optimization/107121, tree-optimization/107160,
- tree-optimization/107212, tree-optimization/107254,
- tree-optimization/107323
-
-* Wed Sep 7 2022 Kalev Lember 12.2.1-2
-- enable GDC on aarch64
-
-* Fri Aug 19 2022 Jakub Jelinek 12.2.1-1
-- update from releases/gcc-12 branch
- - GCC 12.2 release
- - PRs c++/67048, c++/106369, c/106016, d/106623, d/106638, lto/106334,
- lto/106540, middle-end/106492, tree-optimization/106513
-- fix an if-conversion wrong-code bug (PR rtl-optimization/106590)
-- implement C++23 P2327R1 - de-deprecating volatile compound operations - as
- a DR
-
-* Wed Aug 10 2022 Jakub Jelinek 12.1.1-4
-- update from releases/gcc-12 branch
- - PRs analyzer/105285, analyzer/106204, analyzer/106225, c++/53164,
- c++/96363, c++/100374, c++/105541, c++/105626, c++/105634, c++/105637,
- c++/105758, c++/105842, c++/105848, c++/105912, c++/106024,
- c++/106102, c++/106230, c++/106311, c++/106361, d/106139, d/106555,
- d/106563, debug/106261, fortran/101330, fortran/103137,
- fortran/103138, fortran/103504, fortran/103693, fortran/104313,
- fortran/105243, fortran/105691, fortran/105813, fortran/105954,
- fortran/106121, libfortran/106079, libstdc++/88881, libstdc++/100823,
- libstdc++/104443, libstdc++/105844, libstdc++/105880,
- libstdc++/105957, libstdc++/105995, libstdc++/106162,
- libstdc++/106248, lto/106129, middle-end/105965, middle-end/106027,
- middle-end/106144, middle-end/106331, middle-end/106449,
- preprocessor/97498, rtl-optimization/105041, rtl-optimization/106032,
- target/103722, target/105459, target/105930, target/105991,
- target/106091, target/106097, target/106122, testsuite/106345,
- tree-optimization/105665, tree-optimization/105860,
- tree-optimization/105946, tree-optimization/105969,
- tree-optimization/105971, tree-optimization/106063,
- tree-optimization/106087, tree-optimization/106112,
- tree-optimization/106114, tree-optimization/106131,
- tree-optimization/106189
-
-* Thu Jun 30 2022 Jakub Jelinek 12.1.1-3
-- fix up libtsan on s390x
-
-* Tue Jun 28 2022 Jakub Jelinek 12.1.1-2
-- update from releases/gcc-12 branch
- - PRs c++/49387, c++/102307, c++/102651, c++/104470, c++/105491, c++/105589,
- c++/105623, c++/105652, c++/105655, c++/105725, c++/105734,
- c++/105756, c++/105761, c++/105779, c++/105795, c++/105852,
- c++/105871, c++/105885, c++/105908, c++/105925, c++/105931,
- c++/105964, c++/106001, c/105635, d/105544, fortran/105230,
- gcov-profile/105535, ipa/100413, ipa/105600, ipa/105639, ipa/105739,
- libgomp/105745, libgomp/106045, libstdc++/104731, libstdc++/105284,
- libstdc++/105671, libstdc++/105681, middle-end/105537,
- middle-end/105604, middle-end/105711, middle-end/105951,
- middle-end/105998, middle-end/106030, other/105527,
- preprocessor/105732, rtl-optimization/105455, rtl-optimization/105559,
- rtl-optimization/105577, sanitizer/105714, sanitizer/105729,
- target/101891, target/104871, target/105162, target/105209,
- target/105292, target/105472, target/105556, target/105599,
- target/105854, target/105879, target/105953, target/105960,
- target/105970, target/105981, target/106096, tree-optimization/103116,
- tree-optimization/105431, tree-optimization/105458,
- tree-optimization/105528, tree-optimization/105562,
- tree-optimization/105618, tree-optimization/105726,
- tree-optimization/105736, tree-optimization/105786,
- tree-optimization/105940
-- enable tsan and lsan on s390x (#2101610)
-- trim RHEL fortran patches
-- fix nvptx build (PRs bootstrap/105551, target/105938)
-
-* Sat May 7 2022 Jakub Jelinek 12.1.1-1
-- update from releases/gcc-12 branch
- - GCC 12.1 release
- - PRs c++/105476, libstdc++/103911, libstdc++/105441, libstdc++/105502,
- middle-end/105376, middle-end/105461, target/102059, testsuite/105433,
- tree-optimization/105394, tree-optimization/105437,
- tree-optimization/105484
-
-* Thu May 5 2022 Stephen Gallagher 12.0.1-0.18
-- fix annobin plugin conditional to build for ELN
-
-* Fri Apr 29 2022 Jakub Jelinek 12.0.1-0.17
-- update from trunk and releases/gcc-12 branch
- - GCC 12.1-rc1
- - PRs analyzer/105252, analyzer/105264, analyzer/105365, analyzer/105366,
- c++/65211, c++/82980, c++/86193, c++/90107, c++/97219, c++/100838,
- c++/101442, c++/101698, c++/102629, c++/102804, c++/102987,
- c++/103868, c++/104051, c++/104624, c++/104646, c++/104996,
- c++/105256, c++/105265, c++/105268, c++/105287, c++/105289,
- c++/105297, c++/105301, c++/105304, c++/105321, c++/105322,
- c++/105353, c++/105386, c++/105398, c++/105425, c++/105426,
- debug/105089, debug/105203, fortran/70673, fortran/78054,
- fortran/102043, fortran/103662, fortran/104717, fortran/105242,
- fortran/105310, fortran/105379, fortran/105381, gcov-profile/105282,
- ipa/103818, ipa/105306, libgomp/105358, libstdc++/93602,
- libstdc++/99290, libstdc++/102994, libstdc++/104858,
- libstdc++/105269, libstdc++/105324, libstdc++/105375,
- libstdc++/105417, lto/105364, lto/105399, middle-end/104492,
- rtl-optimization/105231, rtl-optimization/105314,
- rtl-optimization/105333, sanitizer/105396, target/89125,
- target/103197, target/104676, target/105247, target/105257,
- target/105271, target/105331, target/105334, target/105338,
- target/105339, target/105349, target/105367, testsuite/105266,
- tree-optimization/100810, tree-optimization/103941,
- tree-optimization/104010, tree-optimization/105219,
- tree-optimization/105254, tree-optimization/105276,
- tree-optimization/105312, tree-optimization/105368,
- tree-optimization/105374
-
-* Wed Apr 13 2022 Jakub Jelinek 12.0.1-0.16
-- update from trunk
- - PRs c++/97296, c++/98249, c++/100111, c++/103105, c++/104142, c++/104669,
- c++/105223, c++/105233, c++/105245, jit/104071, jit/104072,
- jit/104073, jit/104293, middle-end/105253, middle-end/105259,
- rtl-optimization/105211, target/95325, target/97348, target/101755,
- target/102146, target/103623, target/104144, target/104894,
- target/105213, target/105214, target/105234, testsuite/105183,
- tree-optimization/104912, tree-optimization/105226,
- tree-optimization/105232, tree-optimization/105235,
- tree-optimization/105250, tree-optimization/105263
-
-* Mon Apr 11 2022 Jakub Jelinek 12.0.1-0.15
-- update from trunk
- - PRs analyzer/102208, analyzer/103892, c++/91618, c++/92385, c++/96604,
- c++/96645, c++/99479, c++/100370, c++/100608, c++/101051, c++/101677,
- c++/101717, c++/101894, c++/103328, c++/103852, c++/104668,
- c++/104702, c++/105110, c++/105143, c++/105186, c++/105187,
- c++/105191, c/105149, c/105151, d/104740, driver/105096,
- fortran/104210, fortran/105138, fortran/105184, ipa/103376,
- ipa/104303, ipa/105166, jit/102824, libstdc++/105031,
- libstdc++/105128, libstdc++/105146, libstdc++/105153,
- libstdc++/105154, middle-end/105140, middle-end/105165,
- rtl-optimization/104985, target/101908, target/102024, target/103147,
- target/104049, target/104253, target/104409, target/104853,
- target/104897, target/104987, target/105002, target/105069,
- target/105123, target/105139, target/105144, target/105147,
- target/105157, target/105197, testsuite/103196, testsuite/105095,
- testsuite/105122, testsuite/105196, tree-optimization/102586,
- tree-optimization/103761, tree-optimization/104639,
- tree-optimization/104645, tree-optimization/105132,
- tree-optimization/105142, tree-optimization/105148,
- tree-optimization/105150, tree-optimization/105163,
- tree-optimization/105173, tree-optimization/105175,
- tree-optimization/105185, tree-optimization/105189,
- tree-optimization/105198, tree-optimization/105218
-- build annobin gcc plugin as part of gcc build into gcc-plugin-annobin
- subpackage
-
-* Sun Apr 3 2022 Jakub Jelinek 12.0.1-0.14
-- update from trunk
- - revert delayed parse DMI change (PR c++/96645)
-- fix up aarch64 make install
-
-* Fri Apr 1 2022 Jakub Jelinek 12.0.1-0.13
-- update from trunk
- - PRs ada/104767, ada/104861, analyzer/95000, analyzer/99771,
- analyzer/103533, analyzer/104308, analyzer/104793, analyzer/104863,
- analyzer/104943, analyzer/104954, analyzer/104955, analyzer/104979,
- analyzer/104997, analyzer/105017, analyzer/105057, analyzer/105074,
- analyzer/105087, c++/39751, c++/58646, c++/59426, c++/65396,
- c++/71637, c++/84964, c++/87820, c++/92918, c++/93280, c++/95999,
- c++/96329, c++/96437, c++/96440, c++/96645, c++/96780, c++/98644,
- c++/99445, c++/100474, c++/101030, c++/101515, c++/101767, c++/102045,
- c++/102071, c++/102123, c++/102137, c++/102489, c++/102538,
- c++/102740, c++/102869, c++/102990, c++/103177, c++/103291,
- c++/103299, c++/103337, c++/103455, c++/103460, c++/103769,
- c++/103943, c++/103968, c++/104008, c++/104108, c++/104284,
- c++/104476, c++/104527, c++/104568, c++/104583, c++/104608,
- c++/104620, c++/104622, c++/104623, c++/104641, c++/104752,
- c++/104806, c++/104823, c++/104846, c++/104847, c++/104944,
- c++/104994, c++/105003, c++/105006, c++/105035, c++/105050,
- c++/105061, c++/105064, c++/105067, c++/105092, c/82283, c/84685,
- c/98198, c/104711, d/103528, d/104911, d/105004, debug/104564,
- debug/104778, fortran/50549, fortran/100892, fortran/103039,
- fortran/103560, fortran/103691, fortran/104126, fortran/104570,
- fortran/104571, fortran/104811, fortran/104849, fortran/104999,
- ipa/102513, ipa/103083, ipa/103171, ipa/104813, jit/63854,
- libgcc/86224, libgomp/105042, libstdc++/92546, libstdc++/103407,
- libstdc++/104242, libstdc++/104859, libstdc++/104866,
- libstdc++/104870, libstdc++/104875, libstdc++/104990,
- libstdc++/105021, libstdc++/105027, lto/102426, middle-end/90115,
- middle-end/98420, middle-end/99578, middle-end/100680,
- middle-end/102330, middle-end/103597, middle-end/104086,
- middle-end/104285, middle-end/104436, middle-end/104774,
- middle-end/104786, middle-end/104869, middle-end/104885,
- middle-end/104892, middle-end/104966, middle-end/104971,
- middle-end/104975, middle-end/105032, middle-end/105049, other/65095,
- other/102664, other/104899, other/105114, rtl-optimization/103775,
- rtl-optimization/104814, rtl-optimization/104961,
- rtl-optimization/104989, rtl-optimization/105028,
- rtl-optimization/105091, sanitizer/105093, target/86722, target/91229,
- target/94680, target/96882, target/99754, target/102125,
- target/102215, target/102772, target/102986, target/103074,
- target/104004, target/104666, target/104688, target/104714,
- target/104762, target/104783, target/104790, target/104815,
- target/104818, target/104829, target/104840, target/104842,
- target/104857, target/104868, target/104882, target/104890,
- target/104898, target/104902, target/104903, target/104910,
- target/104916, target/104923, target/104925, target/104946,
- target/104952, target/104957, target/104963, target/104967,
- target/104974, target/104976, target/104977, target/104978,
- target/104982, target/104998, target/105000, target/105011,
- target/105052, target/105058, target/105066, target/105068,
- testsuite/102841, testsuite/104759, testsuite/105055,
- testsuite/105085, tree-optimization/80334, tree-optimization/84201,
- tree-optimization/90356, tree-optimization/98335,
- tree-optimization/100834, tree-optimization/101895,
- tree-optimization/102008, tree-optimization/102586,
- tree-optimization/102645, tree-optimization/102943,
- tree-optimization/104645, tree-optimization/104755,
- tree-optimization/104851, tree-optimization/104880,
- tree-optimization/104941, tree-optimization/104942,
- tree-optimization/104960, tree-optimization/104970,
- tree-optimization/105012, tree-optimization/105053,
- tree-optimization/105056, tree-optimization/105070,
- tree-optimization/105080, tree-optimization/105094,
- tree-optimization/105109
-
-* Tue Mar 8 2022 Jakub Jelinek 12.0.1-0.12
-- fix up promoted SUBREG handling (#2045160, PR rtl-optimization/104839)
-- fix up check for asm goto (PR rtl-optimization/104777)
-
-* Tue Mar 8 2022 Jakub Jelinek 12.0.1-0.11
-- update from trunk
- - PRs analyzer/101983, fortran/99585, fortran/104430, libstdc++/104807,
- middle-end/104381, target/99297, target/104779, target/104794,
- target/104797, translation/90148, translation/104552,
- tree-optimization/104782, tree-optimization/104825
-- fix build on i686 where gnat1 was hanging (PR target/104838,
- PR target/104781)
-
-* Sun Mar 6 2022 Jakub Jelinek 12.0.1-0.10
-- update from trunk
- - PRs analyzer/103521, analyzer/104434, c++/70077, c++/79493, c++/103443,
- c++/104618, c++/104667, c++/104682, c/104627, c/104633, d/104659,
- d/104736, debug/100541, fortran/84519, fortran/104131, fortran/104573,
- fortran/104619, gcov-profile/104677, ipa/104533, ipa/104648,
- libstdc++/96526, libstdc++/104602, libstdc++/104748, middle-end/80270,
- middle-end/100400, middle-end/102276, middle-end/103836,
- middle-end/103984, middle-end/104061, middle-end/104132,
- middle-end/104133, middle-end/104529, middle-end/104540,
- middle-end/104550, middle-end/104558, middle-end/104679,
- middle-end/104721, middle-end/104757, middle-end/104761,
- middle-end/104784, rtl-optimization/104154, rtl-optimization/104589,
- rtl-optimization/104637, rtl-optimization/104686, target/87496,
- target/88134, target/99555, target/100757, target/101325,
- target/102429, target/103302, target/104121, target/104208,
- target/104489, target/104656, target/104664, target/104674,
- target/104681, target/104698, target/104704, target/104724,
- target/104726, target/104758, testsuite/100407, testsuite/104687,
- testsuite/104725, testsuite/104727, testsuite/104728,
- testsuite/104730, testsuite/104732, testsuite/104791,
- tree-optimization/91384, tree-optimization/101636,
- tree-optimization/103037, tree-optimization/103845,
- tree-optimization/103856, tree-optimization/104601,
- tree-optimization/104644, tree-optimization/104675,
- tree-optimization/104676, tree-optimization/104700,
- tree-optimization/104715, tree-optimization/104716
-- fix constraints on s390x conditional trap (PR target/104775)
-
-* Tue Feb 22 2022 Jakub Jelinek 12.0.1-0.9
-- update from trunk
- - PRs analyzer/104524, analyzer/104560, analyzer/104576, c++/85493,
- c++/90451, c++/94944, c++/95036, c++/104107, c++/104507, c++/104539,
- c++/104565, c/104506, c/104510, c/104531, c/104532, debug/104517,
- debug/104557, fortran/77693, fortran/104211, libstdc++/104542,
- libstdc++/104559, lto/104617, middle-end/104355, middle-end/104522,
- rtl-optimization/104447, rtl-optimization/104498,
- rtl-optimization/104544, sanitizer/102656, target/99708, target/99881,
- target/100056, target/100874, target/103069, target/104253,
- target/104257, target/104335, target/104440, target/104448,
- target/104536, target/104581, target/104598, target/104612,
- testsuite/104146, tree-optimization/96881, tree-optimization/103771,
- tree-optimization/104519, tree-optimization/104526,
- tree-optimization/104543, tree-optimization/104551,
- tree-optimization/104582, tree-optimization/104604
-
-* Mon Feb 14 2022 Jakub Jelinek 12.0.1-0.8
-- update from trunk
- - PRs ada/97504, ada/98724, c/104505, fortran/104228, libstdc++/100912,
- middle-end/104497, tree-optimization/104511, tree-optimization/104528
- - fix handling of return in arm constexpr ctors and on all arches return in
- constexpr dtors (PR c++/104513)
-
-* Sat Feb 12 2022 Jakub Jelinek 12.0.1-0.7
-- update from trunk
- - PRs analyzer/98797, analyzer/101081, analyzer/102052, analyzer/103872,
- analyzer/104274, analyzer/104417, analyzer/104452, c++/80951,
- c++/96242, c++/96876, c++/102204, c++/103706, c++/103752, c++/104033,
- c++/104379, c++/104403, c++/104410, c++/104425, c++/104432,
- c++/104472, c/104427, debug/104407, fortran/66193, fortran/104329,
- libgomp/104385, libstdc++/104442, middle-end/100775,
- middle-end/104402, middle-end/104446, middle-end/104450,
- middle-end/104464, middle-end/104467, middle-end/104496,
- rtl-optimization/104059, rtl-optimization/104153,
- rtl-optimization/104198, rtl-optimization/104400,
- rtl-optimization/104459, sanitizer/104449, target/35513, target/79754,
- target/97005, target/97040, target/100593, target/102140,
- target/103627, target/104117, target/104283, target/104327,
- target/104345, target/104364, target/104441, target/104451,
- target/104453, target/104456, target/104458, target/104462,
- target/104469, target/104474, target/104502, testsuite/104481,
- tree-optimization/102832, tree-optimization/104288,
- tree-optimization/104373, tree-optimization/104420,
- tree-optimization/104445, tree-optimization/104466,
- tree-optimization/104479, tree-optimization/104499
-
-* Sat Feb 5 2022 Jakub Jelinek 12.0.1-0.6
-- update from trunk
- - PRs analyzer/104369, c++/92385, c++/104079, c++/104300, c++/104302,
- debug/104337, debug/104366, fortran/104311, fortran/104328,
- middle-end/90348, middle-end/104092, middle-end/104260,
- rtl-optimization/101885, target/95082, target/100808, target/103686,
- target/104219, target/104362, target/104380, tree-optimization/103641,
- tree-optimization/104119, tree-optimization/104356,
- tree-optimization/104389
-
-* Wed Feb 2 2022 Jakub Jelinek 12.0.1-0.5
-- update from trunk
- - PRs analyzer/104270, c++/101874, c++/102414, c++/102434, c++/103186,
- c++/104291, c++/104294, d/104287, demangler/98886, demangler/99935,
- fortran/104331, libstdc++/101831, libstdc++/104301, lto/104333,
- middle-end/104232, middle-end/104307, middle-end/95115,
- preprocessor/104147, rtl-optimization/101260, target/94372,
- target/100428, target/104189, target/104298, target/104323,
- tree-optimization/95424, tree-optimization/100499,
- tree-optimization/102819, tree-optimization/103169,
- tree-optimization/103514, tree-optimization/104279,
- tree-optimization/104280, tree-optimization/104281
-- fix a VRP bug with 1-3 bit precision types (PR tree-optimization/104334)
-
-* Sat Jan 29 2022 Jakub Jelinek 12.0.1-0.4
-- update from trunk
- - PRs ada/104258, analyzer/104224, analyzer/104247, bootstrap/67102,
- c++/51344, c++/59950, c++/82632, c++/92752, c++/92944, c++/99895,
- c++/100030, c++/100198, c++/100282, c++/101532, c++/101988,
- c++/103057, c++/103341, c++/103678, c++/104206, c++/104225,
- c++/104226, c++/104235, c++/104245, fortran/84784, fortran/103790,
- fortran/104128, fortran/104212, fortran/104227, libfortran/104233,
- libstdc++/100516, libstdc++/104161, libstdc++/104217,
- libstdc++/104259, lto/104237, middle-end/103642, target/103702,
- target/104201, target/104213, target/104239, testsuite/70230,
- tree-optimization/104196, tree-optimization/104203,
- tree-optimization/104263, tree-optimization/104267, web/104254
-- configure with --enable-libstdcxx-backtrace and package
- libstdc++_libbacktrace.a
-
-* Tue Jan 25 2022 Jakub Jelinek 12.0.1-0.3
-- update from trunk
- - PRs ada/103538, analyzer/94362, analyzer/103685, analyzer/104062,
- analyzer/104089, analyzer/104150, analyzer/104159, bootstrap/104135,
- bootstrap/104170, c++/20040, c++/55227, c++/91911, c++/101072,
- c++/101405, c++/101715, c++/102300, c++/102338, c++/103631,
- c++/103672, c++/103681, c++/104025, c++/104055, c++/104084,
- c++/104134, c++/104139, c++/104148, c++/104173, c++/104182,
- c++/104197, c/104115, debug/103874, fortran/102621, fortran/103695,
- fortran/104127, libgcc/104207, libstdc++/87193, libstdc++/104019,
- libstdc++/104032, libstdc++/104099, libstdc++/104101,
- libstdc++/104123, libstdc++/104174, middle-end/100786,
- middle-end/102860, middle-end/104069, middle-end/104076,
- middle-end/104140, other/104176, other/104181, preprocessor/104030,
- rtl-optimization/102478, sanitizer/99673, sanitizer/104158,
- target/64821, target/94193, target/100784, target/102517,
- target/103676, target/103771, target/104090, target/104136,
- target/104188, testsuite/102833, testsuite/103763, testsuite/104021,
- testsuite/104022, testsuite/104109, tree-optimization/100089,
- tree-optimization/100740, tree-optimization/101508,
- tree-optimization/101972, tree-optimization/102087,
- tree-optimization/102131, tree-optimization/103721,
- tree-optimization/103997, tree-optimization/104112,
- tree-optimization/104114, tree-optimization/104152,
- tree-optimization/104156, tree-optimization/104214
- - don't emit C++ mangling aliases for compatibility with GCC 8.1 ppc64le
- IEEE quad long double (PR target/104172)
-- mark IEEE quad long double in DWARF as implicit typedef to _Float128
- (PR debug/104194)
-
-* Tue Jan 18 2022 Jakub Jelinek 12.0.1-0.2
-- update from trunk
- - PRs c++/104007, c++/104074, fortran/103692, ipa/103989, libstdc++/101124,
- libstdc++/104098, middle-end/103163, tree-optimization/103987,
- tree-optimization/104038
-- default to -mabi=ieeelongdouble on ppc64le
-- fix -Wdangling-pointer with -fsanitize=address (PR middle-end/104103)
-- fix -masm=intel (PR target/104104)
-
-* Tue Jan 18 2022 Jakub Jelinek 12.0.1-0.1
-- update from trunk
- - PRs c++/104031, c/63272, fortran/83079, fortran/87711, fortran/97896,
- libstdc++/103650, libstdc++/104080, middle-end/101292, target/103124,
- target/103973, target/104005, testsuite/104035, testsuite/104037,
- tree-optimization/80532, tree-optimization/101941,
- tree-optimization/104064
-
-* Sat Jan 15 2022 Jakub Jelinek 12.0.0-0.5
-- update from trunk
- - PRs ada/104027, analyzer/104029, c++/70417, c++/103705, c++/103991,
- c/104002, fortran/67804, fortran/99256, fortran/103782,
- libfortran/104006, libstdc++/91260, libstdc++/91383, libstdc++/95065,
- libstdc++/103992, middle-end/100280, middle-end/101475,
- middle-end/104026, target/94790, target/98737, target/100637,
- target/103935, target/103941, target/104001, target/104003,
- target/104014, tree-optimization/83072, tree-optimization/83073,
- tree-optimization/96707, tree-optimization/97909,
- tree-optimization/102192, tree-optimization/103989,
- tree-optimization/104009, tree-optimization/104015
-- include rs6000-vecdefines.h on ppc* (#2040825)
-
-* Wed Jan 12 2022 Jakub Jelinek 12.0.0-0.4
-- update from trunk
- - PRs ada/79724, analyzer/102692, analyzer/103940, c++/89074, c++/103480,
- c++/100588, c++/101597, c++/103783, c++/103831, c++/103879,
- c++/103912, c++/103946, c/101537, c/103881, fortran/82207,
- fortran/101762, fortran/103366, fortran/103777, fortran/103789,
- libstdc++/77760, libstdc++/100017, libstdc++/103726, libstdc++/103866,
- libstdc++/103891, libstdc++/103955, middle-end/70090,
- middle-end/101530, rtl-optimization/98782, rtl-optimization/103974,
- target/53652, target/102024, target/102239, target/103465,
- target/103804, target/103861, testsuite/102935, testsuite/103820,
- tree-optimization/76174, tree-optimization/83541,
- tree-optimization/100359, tree-optimization/103551,
- tree-optimization/103821, tree-optimization/103948,
- tree-optimization/103961, tree-optimization/103971,
- tree-optimization/103977, tree-optimization/103990
-
-* Sat Jan 8 2022 Jakub Jelinek 12.0.0-0.3
+* Sun Jan 15 2023 Jakub Jelinek 13.0.0-0.9
- new package
diff --git a/gcc12-Wno-format-security.patch b/gcc12-Wno-format-security.patch
deleted file mode 100644
index 43e482a..0000000
--- a/gcc12-Wno-format-security.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-2022-01-07 Jakub Jelinek
-
- * Makefile.tpl (GOCFLAGS, GDCFLAGS): Filter out -Wformat-security.
- * Makefile.in: Regenerated.
-
-2017-02-25 Jakub Jelinek
-
- * configure.ac: When adding -Wno-format, also add -Wno-format-security.
- * configure: Regenerated.
-
---- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100
-+++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100
-@@ -570,7 +570,7 @@ AC_ARG_ENABLE(build-format-warnings,
- AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
- [],[enable_build_format_warnings=yes])
- AS_IF([test $enable_build_format_warnings = no],
-- [wf_opt=-Wno-format],[wf_opt=])
-+ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
- ACX_PROG_CXX_WARNING_OPTS(
- m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
- [-Wcast-qual $wf_opt])),
---- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100
-+++ gcc/configure 2017-02-25 12:42:50.041946391 +0100
-@@ -7077,7 +7077,7 @@ else
- fi
-
- if test $enable_build_format_warnings = no; then :
-- wf_opt=-Wno-format
-+ wf_opt="-Wno-format -Wno-format-security"
- else
- wf_opt=
- fi
---- Makefile.tpl.jj 2021-12-30 15:12:42.188164847 +0100
-+++ Makefile.tpl 2022-01-07 12:06:12.115550714 +0100
-@@ -447,8 +447,8 @@ LDFLAGS = @LDFLAGS@
- LIBCFLAGS = $(CFLAGS)
- CXXFLAGS = @CXXFLAGS@
- LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
--GOCFLAGS = $(CFLAGS)
--GDCFLAGS = $(CFLAGS)
-+GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
-+GDCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
-
- # Pass additional PGO and LTO compiler options to the PGO build.
- BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
---- Makefile.in.jj 2021-12-30 15:12:42.188164847 +0100
-+++ Makefile.in 2022-01-07 12:06:27.335334561 +0100
-@@ -444,8 +444,8 @@ LDFLAGS = @LDFLAGS@
- LIBCFLAGS = $(CFLAGS)
- CXXFLAGS = @CXXFLAGS@
- LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
--GOCFLAGS = $(CFLAGS)
--GDCFLAGS = $(CFLAGS)
-+GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
-+GDCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
-
- # Pass additional PGO and LTO compiler options to the PGO build.
- BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
diff --git a/gcc12-d-shared-libphobos.patch b/gcc12-d-shared-libphobos.patch
deleted file mode 100644
index 6384bbb..0000000
--- a/gcc12-d-shared-libphobos.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-2019-01-17 Jakub Jelinek
-
- * d-spec.cc (lang_specific_driver): Make -shared-libphobos
- the default rather than -static-libphobos.
-
---- gcc/d/d-spec.cc.jj 2019-01-01 12:37:49.502444257 +0100
-+++ gcc/d/d-spec.cc 2019-01-17 17:09:45.364949246 +0100
-@@ -408,9 +408,9 @@ lang_specific_driver (cl_decoded_option
- /* Add `-lgphobos' if we haven't already done so. */
- if (phobos_library != PHOBOS_NOLINK)
- {
-- /* Default to static linking. */
-- if (phobos_library != PHOBOS_DYNAMIC)
-- phobos_library = PHOBOS_STATIC;
-+ /* Default to shared linking. */
-+ if (phobos_library != PHOBOS_STATIC)
-+ phobos_library = PHOBOS_DYNAMIC;
-
- #ifdef HAVE_LD_STATIC_DYNAMIC
- if (phobos_library == PHOBOS_STATIC && !static_link)
diff --git a/gcc12-fortran-fdec-duplicates.patch b/gcc12-fortran-fdec-duplicates.patch
deleted file mode 100644
index 5298baa..0000000
--- a/gcc12-fortran-fdec-duplicates.patch
+++ /dev/null
@@ -1,215 +0,0 @@
-From 23b1fcb104c666429451ffaf936f8da5fcd3d43a Mon Sep 17 00:00:00 2001
-From: Mark Eggleston
-Date: Fri, 22 Jan 2021 12:29:47 +0000
-Subject: [PATCH 01/10] Allow duplicate declarations.
-
-Enabled by -fdec-duplicates and -fdec.
-
-Some fixes by Jim MacArthur
-Addition of -fdec-duplicates by Mark Eggleston
----
- gcc/fortran/lang.opt | 4 ++++
- gcc/fortran/options.cc | 1 +
- gcc/fortran/symbol.cc | 21 +++++++++++++++++--
- .../gfortran.dg/duplicate_type_4.f90 | 13 ++++++++++++
- .../gfortran.dg/duplicate_type_5.f90 | 13 ++++++++++++
- .../gfortran.dg/duplicate_type_6.f90 | 13 ++++++++++++
- .../gfortran.dg/duplicate_type_7.f90 | 13 ++++++++++++
- .../gfortran.dg/duplicate_type_8.f90 | 12 +++++++++++
- .../gfortran.dg/duplicate_type_9.f90 | 12 +++++++++++
- 9 files changed, 100 insertions(+), 2 deletions(-)
- create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_4.f90
- create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_5.f90
- create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_6.f90
- create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_7.f90
- create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_8.f90
- create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_9.f90
-
-diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
-index 2b1977c523b..52bd522051e 100644
---- a/gcc/fortran/lang.opt
-+++ b/gcc/fortran/lang.opt
-@@ -469,6 +469,10 @@ Fortran Var(flag_dec_char_conversions)
- Enable the use of character literals in assignments and data statements
- for non-character variables.
-
-+fdec-duplicates
-+Fortran Var(flag_dec_duplicates)
-+Allow varibles to be duplicated in the type specification matches.
-+
- fdec-include
- Fortran Var(flag_dec_include)
- Enable legacy parsing of INCLUDE as statement.
-diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc
-index 3a0b98bf1ec..f19ba87f8a0 100644
---- a/gcc/fortran/options.cc
-+++ b/gcc/fortran/options.cc
-@@ -77,6 +77,7 @@ set_dec_flags (int value)
- SET_BITFLAG (flag_dec_format_defaults, value, value);
- SET_BITFLAG (flag_dec_blank_format_item, value, value);
- SET_BITFLAG (flag_dec_char_conversions, value, value);
-+ SET_BITFLAG (flag_dec_duplicates, value, value);
- }
-
- /* Finalize DEC flags. */
-diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc
-index 3b988d1be22..9843175cc2a 100644
---- a/gcc/fortran/symbol.cc
-+++ b/gcc/fortran/symbol.cc
-@@ -1995,6 +1995,8 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
- if (sym->attr.result && type == BT_UNKNOWN && sym->ns->proc_name)
- type = sym->ns->proc_name->ts.type;
-
-+ flavor = sym->attr.flavor;
-+
- if (type != BT_UNKNOWN && !(sym->attr.function && sym->attr.implicit_type)
- && !(gfc_state_stack->previous && gfc_state_stack->previous->previous
- && gfc_state_stack->previous->previous->state == COMP_SUBMODULE)
-@@ -2007,6 +2009,23 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
- else if (sym->attr.function && sym->attr.result)
- gfc_error ("Symbol %qs at %L already has basic type of %s",
- sym->ns->proc_name->name, where, gfc_basic_typename (type));
-+ else if (flag_dec_duplicates)
-+ {
-+ /* Ignore temporaries and class/procedure names */
-+ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS
-+ || sym->ts.type == BT_PROCEDURE)
-+ return false;
-+
-+ if (gfc_compare_types (&sym->ts, ts)
-+ && (flavor == FL_UNKNOWN || flavor == FL_VARIABLE
-+ || flavor == FL_PROCEDURE))
-+ {
-+ return gfc_notify_std (GFC_STD_LEGACY,
-+ "Symbol '%qs' at %L already has "
-+ "basic type of %s", sym->name, where,
-+ gfc_basic_typename (type));
-+ }
-+ }
- else
- gfc_error ("Symbol %qs at %L already has basic type of %s", sym->name,
- where, gfc_basic_typename (type));
-@@ -2020,8 +2039,6 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
- return false;
- }
-
-- flavor = sym->attr.flavor;
--
- if (flavor == FL_PROGRAM || flavor == FL_BLOCK_DATA || flavor == FL_MODULE
- || flavor == FL_LABEL
- || (flavor == FL_PROCEDURE && sym->attr.subroutine)
-diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_4.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90
-new file mode 100644
-index 00000000000..cdd29ea8846
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90
-@@ -0,0 +1,13 @@
-+! { dg-do compile }
-+! { dg-options "-std=f95" }
-+
-+! PR fortran/30239
-+! Check for errors when a symbol gets declared a type twice, even if it
-+! is the same.
-+
-+INTEGER FUNCTION foo ()
-+ IMPLICIT NONE
-+ INTEGER :: x
-+ INTEGER :: x ! { dg-error "basic type of" }
-+ x = 42
-+END FUNCTION foo
-diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_5.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_5.f90
-new file mode 100644
-index 00000000000..00f931809aa
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/duplicate_type_5.f90
-@@ -0,0 +1,13 @@
-+! { dg-do run }
-+! { dg-options "-fdec" }
-+!
-+! Test case contributed by Mark Eggleston
-+!
-+
-+program test
-+ implicit none
-+ integer :: x
-+ integer :: x
-+ x = 42
-+ if (x /= 42) stop 1
-+end program test
-diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_6.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_6.f90
-new file mode 100644
-index 00000000000..f0df27e323c
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/duplicate_type_6.f90
-@@ -0,0 +1,13 @@
-+! { dg-do run }
-+! { dg-options "-std=legacy -fdec-duplicates" }
-+!
-+! Test case contributed by Mark Eggleston
-+!
-+
-+program test
-+ implicit none
-+ integer :: x
-+ integer :: x
-+ x = 42
-+ if (x /= 42) stop 1
-+end program test
-diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_7.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_7.f90
-new file mode 100644
-index 00000000000..f32472ff586
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/duplicate_type_7.f90
-@@ -0,0 +1,13 @@
-+! { dg-do run }
-+! { dg-options "-fdec-duplicates" }
-+!
-+! Test case contributed by Mark Eggleston
-+!
-+
-+program test
-+ implicit none
-+ integer :: x
-+ integer :: x! { dg-warning "Legacy Extension" }
-+ x = 42
-+ if (x /= 42) stop 1
-+end program test
-diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_8.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_8.f90
-new file mode 100644
-index 00000000000..23c94add179
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/duplicate_type_8.f90
-@@ -0,0 +1,12 @@
-+! { dg-do compile }
-+! { dg-options "-fdec -fno-dec-duplicates" }
-+!
-+! Test case contributed by Mark Eggleston
-+!
-+
-+integer function foo ()
-+ implicit none
-+ integer :: x
-+ integer :: x ! { dg-error "basic type of" }
-+ x = 42
-+end function foo
-diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_9.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_9.f90
-new file mode 100644
-index 00000000000..d5edee4d8ee
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/duplicate_type_9.f90
-@@ -0,0 +1,12 @@
-+! { dg-do compile }
-+! { dg-options "-fdec-duplicates -fno-dec-duplicates" }
-+!
-+! Test case contributed by Mark Eggleston
-+!
-+
-+integer function foo ()
-+ implicit none
-+ integer :: x
-+ integer :: x ! { dg-error "basic type of" }
-+ x = 42
-+end function foo
---
-2.27.0
-
diff --git a/gcc12-fortran-fdec-non-logical-if.patch b/gcc12-fortran-fdec-non-logical-if.patch
deleted file mode 100644
index a3a830c..0000000
--- a/gcc12-fortran-fdec-non-logical-if.patch
+++ /dev/null
@@ -1,378 +0,0 @@
-From cc87ddb841017bb0976b05091733609ee17d7f05 Mon Sep 17 00:00:00 2001
-From: Mark Eggleston
-Date: Fri, 22 Jan 2021 13:15:17 +0000
-Subject: [PATCH 07/10] Allow non-logical expressions in IF statements
-
-Use -fdec-non-logical-if to enable feature. Also enabled using -fdec.
----
- gcc/fortran/lang.opt | 4 ++
- gcc/fortran/options.cc | 1 +
- gcc/fortran/resolve.cc | 60 ++++++++++++++++---
- ...gical_expressions_if_statements_blocks_1.f | 25 ++++++++
- ...gical_expressions_if_statements_blocks_2.f | 25 ++++++++
- ...gical_expressions_if_statements_blocks_3.f | 25 ++++++++
- ...gical_expressions_if_statements_blocks_4.f | 45 ++++++++++++++
- ...gical_expressions_if_statements_blocks_5.f | 45 ++++++++++++++
- ...gical_expressions_if_statements_blocks_6.f | 45 ++++++++++++++
- 9 files changed, 266 insertions(+), 9 deletions(-)
- create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
-
-diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
-index 4a269ebb22d..d886c2f33ed 100644
---- a/gcc/fortran/lang.opt
-+++ b/gcc/fortran/lang.opt
-@@ -506,6 +506,10 @@ fdec-override-kind
- Fortran Var(flag_dec_override_kind)
- Enable support for per variable kind specification.
-
-+fdec-non-logical-if
-+Fortran Var(flag_dec_non_logical_if)
-+Enable support for non-logical expressions in if statements.
-+
- fdec-structure
- Fortran Var(flag_dec_structure)
- Enable support for DEC STRUCTURE/RECORD.
-diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc
-index edbab483b36..a946c86790a 100644
---- a/gcc/fortran/options.cc
-+++ b/gcc/fortran/options.cc
-@@ -79,6 +79,7 @@ set_dec_flags (int value)
- SET_BITFLAG (flag_dec_char_conversions, value, value);
- SET_BITFLAG (flag_dec_duplicates, value, value);
- SET_BITFLAG (flag_dec_override_kind, value, value);
-+ SET_BITFLAG (flag_dec_non_logical_if, value, value);
- }
-
- /* Finalize DEC flags. */
-diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
-index bc0df0fdb99..07dd039f3bf 100644
---- a/gcc/fortran/resolve.cc
-+++ b/gcc/fortran/resolve.cc
-@@ -10789,10 +10789,31 @@ gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
- switch (b->op)
- {
- case EXEC_IF:
-- if (t && b->expr1 != NULL
-- && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
-- gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
-- &b->expr1->where);
-+ if (t && b->expr1 != NULL)
-+ {
-+ if (flag_dec_non_logical_if && b->expr1->ts.type != BT_LOGICAL)
-+ {
-+ gfc_expr* cast;
-+ cast = gfc_ne (b->expr1,
-+ gfc_get_int_expr (1, &gfc_current_locus, 0),
-+ INTRINSIC_NE);
-+ if (cast == NULL)
-+ gfc_internal_error ("gfc_resolve_blocks(): Failed to cast "
-+ "to LOGICAL in IF");
-+ b->expr1 = cast;
-+ if (warn_conversion_extra)
-+ {
-+ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in"
-+ " IF statement condition %L will be true if"
-+ " it evaluates to nonzero",
-+ &b->expr1->where);
-+ }
-+ }
-+
-+ if ((b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
-+ gfc_error ("IF clause at %L requires a scalar LOGICAL "
-+ "expression", &b->expr1->where);
-+ }
- break;
-
- case EXEC_WHERE:
-@@ -12093,11 +12114,32 @@ start:
- break;
-
- case EXEC_IF:
-- if (t && code->expr1 != NULL
-- && (code->expr1->ts.type != BT_LOGICAL
-- || code->expr1->rank != 0))
-- gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
-- &code->expr1->where);
-+ if (t && code->expr1 != NULL)
-+ {
-+ if (flag_dec_non_logical_if
-+ && code->expr1->ts.type != BT_LOGICAL)
-+ {
-+ gfc_expr* cast;
-+ cast = gfc_ne (code->expr1,
-+ gfc_get_int_expr (1, &gfc_current_locus, 0),
-+ INTRINSIC_NE);
-+ if (cast == NULL)
-+ gfc_internal_error ("gfc_resolve_code(): Failed to cast "
-+ "to LOGICAL in IF");
-+ code->expr1 = cast;
-+ if (warn_conversion_extra)
-+ {
-+ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in"
-+ " IF statement condition %L will be true if"
-+ " it evaluates to nonzero",
-+ &code->expr1->where);
-+ }
-+ }
-+
-+ if (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank != 0)
-+ gfc_error ("IF clause at %L requires a scalar LOGICAL "
-+ "expression", &code->expr1->where);
-+ }
- break;
-
- case EXEC_CALL:
-diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
-new file mode 100644
-index 00000000000..0101db893ca
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
-@@ -0,0 +1,25 @@
-+! { dg-do run }
-+! { dg-options "-fdec -Wconversion-extra" }
-+!
-+! Allow logical expressions in if statements and blocks
-+!
-+! Contributed by Francisco Redondo Marchena
-+! and Jeff Law
-+! Modified by Mark Eggleston
-+!
-+ PROGRAM logical_exp_if_st_bl
-+ INTEGER ipos/1/
-+ INTEGER ineg/0/
-+
-+ ! Test non logical variables
-+ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" }
-+ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" }
-+
-+ ! Test non logical expressions in if statements
-+ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" }
-+
-+ ! Test non logical expressions in if blocks
-+ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" }
-+ STOP 4
-+ endif
-+ END
-diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
-new file mode 100644
-index 00000000000..876f4e09508
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
-@@ -0,0 +1,25 @@
-+! { dg-do run }
-+! { dg-options "-fdec-non-logical-if -Wconversion-extra" }
-+!
-+! Allow logical expressions in if statements and blocks
-+!
-+! Contributed by Francisco Redondo Marchena
-+! and Jeff Law
-+! Modified by Mark Eggleston
-+!
-+ PROGRAM logical_exp_if_st_bl
-+ INTEGER ipos/1/
-+ INTEGER ineg/0/
-+
-+ ! Test non logical variables
-+ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" }
-+ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" }
-+
-+ ! Test non logical expressions in if statements
-+ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" }
-+
-+ ! Test non logical expressions in if blocks
-+ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" }
-+ STOP 4
-+ endif
-+ END
-diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
-new file mode 100644
-index 00000000000..35cb4c51b8d
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
-@@ -0,0 +1,25 @@
-+! { dg-do compile }
-+! { dg-options "-fdec -fno-dec-non-logical-if" }
-+!
-+! Allow logical expressions in if statements and blocks
-+!
-+! Contributed by Francisco Redondo Marchena
-+! and Jeff Law
-+! Modified by Mark Eggleston
-+!
-+ PROGRAM logical_exp_if_st_bl
-+ INTEGER ipos/1/
-+ INTEGER ineg/0/
-+
-+ ! Test non logical variables
-+ if (ineg) STOP 1 ! { dg-error "IF clause at" }
-+ if (0) STOP 2 ! { dg-error "IF clause at" }
-+
-+ ! Test non logical expressions in if statements
-+ if (MOD(ipos, 1)) STOP 3 ! { dg-error "IF clause at" }
-+
-+ ! Test non logical expressions in if blocks
-+ if (MOD(2 * ipos, 2)) then ! { dg-error "IF clause at" }
-+ STOP 4
-+ endif
-+ END
-diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
-new file mode 100644
-index 00000000000..7b60b60827f
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
-@@ -0,0 +1,45 @@
-+! { dg-do run }
-+! { dg-options "-fdec -Wconversion-extra" }
-+!
-+! Contributed by Francisco Redondo Marchena
-+! and Jeff Law
-+! Modified by Mark Eggleston
-+!
-+ function othersub1()
-+ integer*4 othersub1
-+ othersub1 = 9
-+ end
-+
-+ function othersub2()
-+ integer*4 othersub2
-+ othersub2 = 0
-+ end
-+
-+ program MAIN
-+ integer*4 othersub1
-+ integer*4 othersub2
-+ integer a /1/
-+ integer b /2/
-+
-+ if (othersub1()) then ! { dg-warning "if it evaluates to nonzero" }
-+ write(*,*) "OK"
-+ else
-+ stop 1
-+ end if
-+ if (othersub2()) then ! { dg-warning "if it evaluates to nonzero" }
-+ stop 2
-+ else
-+ write(*,*) "OK"
-+ end if
-+ if (a-b) then ! { dg-warning "if it evaluates to nonzero" }
-+ write(*,*) "OK"
-+ else
-+ stop 3
-+ end if
-+ if (b-(a+1)) then ! { dg-warning "if it evaluates to nonzero" }
-+ stop 3
-+ else
-+ write(*,*) "OK"
-+ end if
-+ end
-+
-diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
-new file mode 100644
-index 00000000000..80336f48ca1
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
-@@ -0,0 +1,45 @@
-+! { dg-do run }
-+! { dg-options "-fdec-non-logical-if -Wconversion-extra" }
-+!
-+! Contributed by Francisco Redondo Marchena
-+! and Jeff Law
-+! Modified by Mark Eggleston
-+!
-+ function othersub1()
-+ integer*4 othersub1
-+ othersub1 = 9
-+ end
-+
-+ function othersub2()
-+ integer*4 othersub2
-+ othersub2 = 0
-+ end
-+
-+ program MAIN
-+ integer*4 othersub1
-+ integer*4 othersub2
-+ integer a /1/
-+ integer b /2/
-+
-+ if (othersub1()) then ! { dg-warning "Non-LOGICAL type in IF statement" }
-+ write(*,*) "OK"
-+ else
-+ stop 1
-+ end if
-+ if (othersub2()) then ! { dg-warning "Non-LOGICAL type in IF statement" }
-+ stop 2
-+ else
-+ write(*,*) "OK"
-+ end if
-+ if (a-b) then ! { dg-warning "Non-LOGICAL type in IF statement" }
-+ write(*,*) "OK"
-+ else
-+ stop 3
-+ end if
-+ if (b-(a+1)) then ! { dg-warning "Non-LOGICAL type in IF statement" }
-+ stop 3
-+ else
-+ write(*,*) "OK"
-+ end if
-+ end
-+
-diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
-new file mode 100644
-index 00000000000..e1125ca717a
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
-@@ -0,0 +1,45 @@
-+! { dg-do compile }
-+! { dg-options "-fdec -fno-dec-non-logical-if" }
-+!
-+! Contributed by Francisco Redondo Marchena
-+! and Jeff Law
-+! Modified by Mark Eggleston
-+!
-+ function othersub1()
-+ integer*4 othersub1
-+ othersub1 = 9
-+ end
-+
-+ function othersub2()
-+ integer*4 othersub2
-+ othersub2 = 0
-+ end
-+
-+ program MAIN
-+ integer*4 othersub1
-+ integer*4 othersub2
-+ integer a /1/
-+ integer b /2/
-+
-+ if (othersub1()) then ! { dg-error "IF clause at" }
-+ write(*,*) "OK"
-+ else
-+ stop 1
-+ end if
-+ if (othersub2()) then ! { dg-error "IF clause at" }
-+ stop 2
-+ else
-+ write(*,*) "OK"
-+ end if
-+ if (a-b) then ! { dg-error "IF clause at" }
-+ write(*,*) "OK"
-+ else
-+ stop 3
-+ end if
-+ if (b-(a+1)) then ! { dg-error "IF clause at" }
-+ stop 3
-+ else
-+ write(*,*) "OK"
-+ end if
-+ end
-+
---
-2.27.0
-
diff --git a/gcc12-fortran-fdec-override-kind.patch b/gcc12-fortran-fdec-override-kind.patch
deleted file mode 100644
index 370fa56..0000000
--- a/gcc12-fortran-fdec-override-kind.patch
+++ /dev/null
@@ -1,588 +0,0 @@
-From 786869fd62813e80da9b6545a295d53c36275c19 Mon Sep 17 00:00:00 2001
-From: Mark Eggleston
-Date: Fri, 22 Jan 2021 13:12:14 +0000
-Subject: [PATCH 06/10] Allow string length and kind to be specified on a per
- variable basis.
-
-This allows kind/length to be mixed with array specification in
-declarations.
-
-e.g.
-
- INTEGER*4 x*2, y*8
- CHARACTER names*20(10)
- REAL v(100)*8, vv*4(50)
-
-The per-variable size overrides the kind or length specified for the type.
-
-Use -fdec-override-kind to enable. Also enabled by -fdec.
-
-Note: this feature is a merger of two previously separate features.
-
-Now accepts named constants as kind parameters:
-
- INTEGER A
- PARAMETER (A=2)
- INTEGER B*(A)
-
-Contributed by Mark Eggleston
-
-Now rejects invalid kind parameters and prints error messages:
-
- INTEGER X*3
-
-caused an internal compiler error.
-
-Contributed by Mark Eggleston
----
- gcc/fortran/decl.cc | 156 ++++++++++++++----
- gcc/fortran/lang.opt | 4 +
- gcc/fortran/options.cc | 1 +
- .../dec_mixed_char_array_declaration_1.f | 13 ++
- .../dec_mixed_char_array_declaration_2.f | 13 ++
- .../dec_mixed_char_array_declaration_3.f | 13 ++
- .../gfortran.dg/dec_spec_in_variable_1.f | 31 ++++
- .../gfortran.dg/dec_spec_in_variable_2.f | 31 ++++
- .../gfortran.dg/dec_spec_in_variable_3.f | 31 ++++
- .../gfortran.dg/dec_spec_in_variable_4.f | 14 ++
- .../gfortran.dg/dec_spec_in_variable_5.f | 19 +++
- .../gfortran.dg/dec_spec_in_variable_6.f | 19 +++
- .../gfortran.dg/dec_spec_in_variable_7.f | 15 ++
- .../gfortran.dg/dec_spec_in_variable_8.f | 14 ++
- 14 files changed, 340 insertions(+), 34 deletions(-)
- create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
- create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
-
-diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
-index 5c8c1b7981b..f7dc9d8263d 100644
---- a/gcc/fortran/decl.cc
-+++ b/gcc/fortran/decl.cc
-@@ -1213,6 +1213,54 @@ syntax:
- return MATCH_ERROR;
- }
-
-+/* This matches the nonstandard kind given after a variable name, like:
-+ INTEGER x*2, y*4
-+ The per-variable kind will override any kind given in the type
-+ declaration.
-+*/
-+
-+static match
-+match_per_symbol_kind (int *length)
-+{
-+ match m;
-+ gfc_expr *expr = NULL;
-+
-+ m = gfc_match_char ('*');
-+ if (m != MATCH_YES)
-+ return m;
-+
-+ m = gfc_match_small_literal_int (length, NULL);
-+ if (m == MATCH_YES || m == MATCH_ERROR)
-+ return m;
-+
-+ if (gfc_match_char ('(') == MATCH_NO)
-+ return MATCH_ERROR;
-+
-+ m = gfc_match_expr (&expr);
-+ if (m == MATCH_YES)
-+ {
-+ m = MATCH_ERROR; // Assume error
-+ if (gfc_expr_check_typed (expr, gfc_current_ns, false))
-+ {
-+ if ((expr->expr_type == EXPR_CONSTANT)
-+ && (expr->ts.type == BT_INTEGER))
-+ {
-+ *length = mpz_get_si(expr->value.integer);
-+ m = MATCH_YES;
-+ }
-+ }
-+
-+ if (m == MATCH_YES)
-+ {
-+ if (gfc_match_char (')') == MATCH_NO)
-+ m = MATCH_ERROR;
-+ }
-+ }
-+
-+ if (expr != NULL)
-+ gfc_free_expr (expr);
-+ return m;
-+}
-
- /* Special subroutine for finding a symbol. Check if the name is found
- in the current name space. If not, and we're compiling a function or
-@@ -2443,6 +2491,35 @@ check_function_name (char *name)
- }
-
-
-+static match
-+match_character_length_clause (gfc_charlen **cl, bool *cl_deferred, int elem)
-+{
-+ gfc_expr* char_len;
-+ char_len = NULL;
-+
-+ match m = match_char_length (&char_len, cl_deferred, false);
-+ if (m == MATCH_YES)
-+ {
-+ *cl = gfc_new_charlen (gfc_current_ns, NULL);
-+ (*cl)->length = char_len;
-+ }
-+ else if (m == MATCH_NO)
-+ {
-+ if (elem > 1
-+ && (current_ts.u.cl->length == NULL
-+ || current_ts.u.cl->length->expr_type != EXPR_CONSTANT))
-+ {
-+ *cl = gfc_new_charlen (gfc_current_ns, NULL);
-+ (*cl)->length = gfc_copy_expr (current_ts.u.cl->length);
-+ }
-+ else
-+ *cl = current_ts.u.cl;
-+
-+ *cl_deferred = current_ts.deferred;
-+ }
-+ return m;
-+}
-+
- /* Match a variable name with an optional initializer. When this
- subroutine is called, a variable is expected to be parsed next.
- Depending on what is happening at the moment, updates either the
-@@ -2453,7 +2530,7 @@ variable_decl (int elem)
- {
- char name[GFC_MAX_SYMBOL_LEN + 1];
- static unsigned int fill_id = 0;
-- gfc_expr *initializer, *char_len;
-+ gfc_expr *initializer;
- gfc_array_spec *as;
- gfc_array_spec *cp_as; /* Extra copy for Cray Pointees. */
- gfc_charlen *cl;
-@@ -2462,11 +2539,15 @@ variable_decl (int elem)
- match m;
- bool t;
- gfc_symbol *sym;
-+ match cl_match;
-+ match kind_match;
-+ int overridden_kind;
- char c;
-
- initializer = NULL;
- as = NULL;
- cp_as = NULL;
-+ kind_match = MATCH_NO;
-
- /* When we get here, we've just matched a list of attributes and
- maybe a type and a double colon. The next thing we expect to see
-@@ -2519,6 +2600,28 @@ variable_decl (int elem)
-
- var_locus = gfc_current_locus;
-
-+
-+ cl = NULL;
-+ cl_deferred = false;
-+ cl_match = MATCH_NO;
-+
-+ /* Check for a character length clause before an array clause */
-+ if (flag_dec_override_kind)
-+ {
-+ if (current_ts.type == BT_CHARACTER)
-+ {
-+ cl_match = match_character_length_clause (&cl, &cl_deferred, elem);
-+ if (cl_match == MATCH_ERROR)
-+ goto cleanup;
-+ }
-+ else
-+ {
-+ kind_match = match_per_symbol_kind (&overridden_kind);
-+ if (kind_match == MATCH_ERROR)
-+ goto cleanup;
-+ }
-+ }
-+
- /* Now we could see the optional array spec. or character length. */
- m = gfc_match_array_spec (&as, true, true);
- if (m == MATCH_ERROR)
-@@ -2667,40 +2770,12 @@ variable_decl (int elem)
- }
- }
-
-- char_len = NULL;
-- cl = NULL;
-- cl_deferred = false;
--
-- if (current_ts.type == BT_CHARACTER)
-+ /* Second chance for a character length clause */
-+ if (cl_match == MATCH_NO && current_ts.type == BT_CHARACTER)
- {
-- switch (match_char_length (&char_len, &cl_deferred, false))
-- {
-- case MATCH_YES:
-- cl = gfc_new_charlen (gfc_current_ns, NULL);
--
-- cl->length = char_len;
-- break;
--
-- /* Non-constant lengths need to be copied after the first
-- element. Also copy assumed lengths. */
-- case MATCH_NO:
-- if (elem > 1
-- && (current_ts.u.cl->length == NULL
-- || current_ts.u.cl->length->expr_type != EXPR_CONSTANT))
-- {
-- cl = gfc_new_charlen (gfc_current_ns, NULL);
-- cl->length = gfc_copy_expr (current_ts.u.cl->length);
-- }
-- else
-- cl = current_ts.u.cl;
--
-- cl_deferred = current_ts.deferred;
--
-- break;
--
-- case MATCH_ERROR:
-- goto cleanup;
-- }
-+ m = match_character_length_clause (&cl, &cl_deferred, elem);
-+ if (m == MATCH_ERROR)
-+ goto cleanup;
- }
-
- /* The dummy arguments and result of the abreviated form of MODULE
-@@ -2802,6 +2877,19 @@ variable_decl (int elem)
- goto cleanup;
- }
-
-+ if (kind_match == MATCH_YES)
-+ {
-+ gfc_find_symbol (name, gfc_current_ns, 1, &sym);
-+ /* sym *must* be found at this point */
-+ sym->ts.kind = overridden_kind;
-+ if (gfc_validate_kind (sym->ts.type, sym->ts.kind, true) < 0)
-+ {
-+ gfc_error ("Kind %d not supported for type %s at %C",
-+ sym->ts.kind, gfc_basic_typename (sym->ts.type));
-+ return MATCH_ERROR;
-+ }
-+ }
-+
- if (!check_function_name (name))
- {
- m = MATCH_ERROR;
-diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
-index 25cc948699b..4a269ebb22d 100644
---- a/gcc/fortran/lang.opt
-+++ b/gcc/fortran/lang.opt
-@@ -502,6 +502,10 @@ fdec-math
- Fortran Var(flag_dec_math)
- Enable legacy math intrinsics for compatibility.
-
-+fdec-override-kind
-+Fortran Var(flag_dec_override_kind)
-+Enable support for per variable kind specification.
-+
- fdec-structure
- Fortran Var(flag_dec_structure)
- Enable support for DEC STRUCTURE/RECORD.
-diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc
-index d6bd36c3a8a..edbab483b36 100644
---- a/gcc/fortran/options.cc
-+++ b/gcc/fortran/options.cc
-@@ -78,6 +78,7 @@ set_dec_flags (int value)
- SET_BITFLAG (flag_dec_blank_format_item, value, value);
- SET_BITFLAG (flag_dec_char_conversions, value, value);
- SET_BITFLAG (flag_dec_duplicates, value, value);
-+ SET_BITFLAG (flag_dec_override_kind, value, value);
- }
-
- /* Finalize DEC flags. */
-diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
-new file mode 100644
-index 00000000000..706ea4112a4
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
-@@ -0,0 +1,13 @@
-+! { dg-do run }
-+! { dg-options "-fdec" }
-+!
-+! Test character declaration with mixed string length and array specification
-+!
-+! Contributed by Jim MacArthur
-+! Modified by Mark Eggleston
-+!
-+ PROGRAM character_declaration
-+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/
-+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
-+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1
-+ END
-diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
-new file mode 100644
-index 00000000000..26d2acf01de
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
-@@ -0,0 +1,13 @@
-+! { dg-do run }
-+! { dg-options "-fdec-override-kind" }
-+!
-+! Test character declaration with mixed string length and array specification
-+!
-+! Contributed by Jim MacArthur
-+! Modified by Mark Eggleston
-+!
-+ PROGRAM character_declaration
-+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/
-+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
-+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1
-+ END
-diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
-new file mode 100644
-index 00000000000..76e4f0bdb93
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
-@@ -0,0 +1,13 @@
-+! { dg-do compile }
-+! { dg-options "-fdec-override-kind -fno-dec-override-kind" }
-+!
-+! Test character declaration with mixed string length and array specification
-+!
-+! Contributed by Jim MacArthur
-+! Modified by Mark Eggleston
-+!
-+ PROGRAM character_declaration
-+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ ! { dg-error "Syntax error" }
-+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
-+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 ! { dg-error " Operands of comparison operator" }
-+ END
-diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
-new file mode 100644
-index 00000000000..edd0f5874b7
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
-@@ -0,0 +1,31 @@
-+! { dg-do run }
-+! { dg-options "-fdec" }
-+!
-+! Test kind specification in variable not in type
-+!
-+! Contributed by Mark Eggleston
-+!
-+ program spec_in_var
-+ integer*8 ai*1, bi*4, ci
-+ real*4 ar*4, br*8, cr
-+
-+ ai = 1
-+ ar = 1.0
-+ bi = 2
-+ br = 2.0
-+ ci = 3
-+ cr = 3.0
-+
-+ if (ai .ne. 1) stop 1
-+ if (abs(ar - 1.0) > 1.0D-6) stop 2
-+ if (bi .ne. 2) stop 3
-+ if (abs(br - 2.0) > 1.0D-6) stop 4
-+ if (ci .ne. 3) stop 5
-+ if (abs(cr - 3.0) > 1.0D-6) stop 6
-+ if (kind(ai) .ne. 1) stop 7
-+ if (kind(ar) .ne. 4) stop 8
-+ if (kind(bi) .ne. 4) stop 9
-+ if (kind(br) .ne. 8) stop 10
-+ if (kind(ci) .ne. 8) stop 11
-+ if (kind(cr) .ne. 4) stop 12
-+ end
-diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
-new file mode 100644
-index 00000000000..bfaba584dbb
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
-@@ -0,0 +1,31 @@
-+! { dg-do run }
-+! { dg-options "-fdec-override-kind" }
-+!
-+! Test kind specification in variable not in type
-+!
-+! Contributed by Mark Eggleston
-+!
-+ program spec_in_var
-+ integer*8 ai*1, bi*4, ci
-+ real*4 ar*4, br*8, cr
-+
-+ ai = 1
-+ ar = 1.0
-+ bi = 2
-+ br = 2.0
-+ ci = 3
-+ cr = 3.0
-+
-+ if (ai .ne. 1) stop 1
-+ if (abs(ar - 1.0) > 1.0D-6) stop 2
-+ if (bi .ne. 2) stop 3
-+ if (abs(br - 2.0) > 1.0D-6) stop 4
-+ if (ci .ne. 3) stop 5
-+ if (abs(cr - 3.0) > 1.0D-6) stop 6
-+ if (kind(ai) .ne. 1) stop 7
-+ if (kind(ar) .ne. 4) stop 8
-+ if (kind(bi) .ne. 4) stop 9
-+ if (kind(br) .ne. 8) stop 10
-+ if (kind(ci) .ne. 8) stop 11
-+ if (kind(cr) .ne. 4) stop 12
-+ end
-diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
-new file mode 100644
-index 00000000000..5ff434e7466
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
-@@ -0,0 +1,31 @@
-+! { dg-do compile }
-+! { dg-options "-fdec -fno-dec-override-kind" }
-+!
-+! Test kind specification in variable not in type
-+!
-+! Contributed by Mark Eggleston
-+!
-+ program spec_in_var
-+ integer*8 ai*1, bi*4, ci ! { dg-error "Syntax error" }
-+ real*4 ar*4, br*8, cr ! { dg-error "Syntax error" }
-+
-+ ai = 1
-+ ar = 1.0
-+ bi = 2
-+ br = 2.0
-+ ci = 3
-+ cr = 3.0
-+
-+ if (ai .ne. 1) stop 1
-+ if (abs(ar - 1.0) > 1.0D-6) stop 2
-+ if (bi .ne. 2) stop 3
-+ if (abs(br - 2.0) > 1.0D-6) stop 4
-+ if (ci .ne. 3) stop 5
-+ if (abs(cr - 3.0) > 1.0D-6) stop 6
-+ if (kind(ai) .ne. 1) stop 7
-+ if (kind(ar) .ne. 4) stop 8
-+ if (kind(bi) .ne. 4) stop 9
-+ if (kind(br) .ne. 8) stop 10
-+ if (kind(ci) .ne. 8) stop 11
-+ if (kind(cr) .ne. 4) stop 12
-+ end
-diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
-new file mode 100644
-index 00000000000..c01980e8b9d
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
-@@ -0,0 +1,14 @@
-+! { dg-do compile }
-+!
-+! Test kind specification in variable not in type. The per variable
-+! kind specification is not enabled so these should fail
-+!
-+! Contributed by Mark Eggleston
-+!
-+ program spec_in_var
-+ integer a
-+ parameter(a=2)
-+ integer b*(a) ! { dg-error "Syntax error" }
-+ real c*(8) ! { dg-error "Syntax error" }
-+ logical d*1_1 ! { dg-error "Syntax error" }
-+ end
-diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
-new file mode 100644
-index 00000000000..e2f39da3f4f
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
-@@ -0,0 +1,19 @@
-+! { dg-do run }
-+! { dg-options "-fdec-override-kind" }
-+!
-+! Test kind specification in variable not in type
-+!
-+! Contributed by Mark Eggleston
-+!
-+ program spec_in_var
-+ integer a
-+ parameter(a=2)
-+ integer b*(a)
-+ real c*(8)
-+ logical d*(1_1)
-+ character e*(a)
-+ if (kind(b).ne.2) stop 1
-+ if (kind(c).ne.8) stop 2
-+ if (kind(d).ne.1) stop 3
-+ if (len(e).ne.2) stop 4
-+ end
-diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
-new file mode 100644
-index 00000000000..569747874e3
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
-@@ -0,0 +1,19 @@
-+! { dg-do run }
-+! { dg-options "-fdec" }
-+!
-+! Test kind specification in variable not in type
-+!
-+! Contributed by Mark Eggleston
-+!
-+ program spec_in_var
-+ integer a
-+ parameter(a=2)
-+ integer b*(a)
-+ real c*(8)
-+ logical d*(1_1)
-+ character e*(a)
-+ if (kind(b).ne.2) stop 1
-+ if (kind(c).ne.8) stop 2
-+ if (kind(d).ne.1) stop 3
-+ if (len(e).ne.2) stop 4
-+ end
-diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
-new file mode 100644
-index 00000000000..b975bfd15c5
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
-@@ -0,0 +1,15 @@
-+! { dg-do compile }
-+! { dg-options "-fdec -fno-dec-override-kind" }
-+!
-+! Test kind specification in variable not in type as the per variable
-+! kind specification is not enables these should fail
-+!
-+! Contributed by Mark Eggleston
-+!
-+ program spec_in_var
-+ integer a
-+ parameter(a=2)
-+ integer b*(a) ! { dg-error "Syntax error" }
-+ real c*(8) ! { dg-error "Syntax error" }
-+ logical d*1_1 ! { dg-error "Syntax error" }
-+ end
-diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
-new file mode 100644
-index 00000000000..85732e0bd85
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
-@@ -0,0 +1,14 @@
-+! { dg-do compile }
-+! { dg-options "-fdec" }
-+!
-+! Check that invalid kind values are rejected.
-+!
-+! Contributed by Mark Eggleston
-+!
-+ program spec_in_var
-+ integer a
-+ parameter(a=3)
-+ integer b*(a) ! { dg-error "Kind 3 not supported" }
-+ real c*(78) ! { dg-error "Kind 78 not supported" }
-+ logical d*(*) ! { dg-error "Invalid character" }
-+ end
---
-2.27.0
-
diff --git a/gcc12-fortran-flogical-as-integer.patch b/gcc12-fortran-flogical-as-integer.patch
deleted file mode 100644
index 28df5e1..0000000
--- a/gcc12-fortran-flogical-as-integer.patch
+++ /dev/null
@@ -1,305 +0,0 @@
-From 9b45f3063dfd2b893e7963a4828c1b0afecdc68a Mon Sep 17 00:00:00 2001
-From: Mark Eggleston
-Date: Fri, 22 Jan 2021 12:41:46 +0000
-Subject: [PATCH 02/10] Convert LOGICAL to INTEGER for arithmetic ops, and vice
- versa
-
-We allow converting LOGICAL types to INTEGER when doing arithmetic
-operations, and converting INTEGER types to LOGICAL for use in
-boolean operations.
-
-This feature is enabled with the -flogical-as-integer flag.
-
-Note: using this feature will disable bitwise logical operations enabled by
--fdec.
----
- gcc/fortran/lang.opt | 4 ++
- gcc/fortran/resolve.cc | 55 ++++++++++++++++++-
- .../logical_to_integer_and_vice_versa_1.f | 31 +++++++++++
- .../logical_to_integer_and_vice_versa_2.f | 31 +++++++++++
- .../logical_to_integer_and_vice_versa_3.f | 33 +++++++++++
- .../logical_to_integer_and_vice_versa_4.f | 33 +++++++++++
- 6 files changed, 186 insertions(+), 1 deletion(-)
- create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
- create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
- create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
- create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
-
-diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
-index 52bd522051e..c4da248f07c 100644
---- a/gcc/fortran/lang.opt
-+++ b/gcc/fortran/lang.opt
-@@ -497,6 +497,10 @@ fdec-static
- Fortran Var(flag_dec_static)
- Enable DEC-style STATIC and AUTOMATIC attributes.
-
-+flogical-as-integer
-+Fortran Var(flag_logical_as_integer)
-+Convert from integer to logical or logical to integer for arithmetic operations.
-+
- fdefault-double-8
- Fortran Var(flag_default_double)
- Set the default double precision kind to an 8 byte wide type.
-diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
-index c075d0fa0c4..4b90cb59902 100644
---- a/gcc/fortran/resolve.cc
-+++ b/gcc/fortran/resolve.cc
-@@ -3915,7 +3915,6 @@ lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
- return gfc_closest_fuzzy_match (op, candidates);
- }
-
--
- /* Callback finding an impure function as an operand to an .and. or
- .or. expression. Remember the last function warned about to
- avoid double warnings when recursing. */
-@@ -3975,6 +3974,22 @@ convert_hollerith_to_character (gfc_expr *e)
- }
- }
-
-+/* If E is a logical, convert it to an integer and issue a warning
-+ for the conversion. */
-+
-+static void
-+convert_integer_to_logical (gfc_expr *e)
-+{
-+ if (e->ts.type == BT_INTEGER)
-+ {
-+ /* Convert to LOGICAL */
-+ gfc_typespec t;
-+ t.type = BT_LOGICAL;
-+ t.kind = 1;
-+ gfc_convert_type_warn (e, &t, 2, 1);
-+ }
-+}
-+
- /* Convert to numeric and issue a warning for the conversion. */
-
- static void
-@@ -3987,6 +4002,22 @@ convert_to_numeric (gfc_expr *a, gfc_expr *b)
- gfc_convert_type_warn (a, &t, 2, 1);
- }
-
-+/* If E is a logical, convert it to an integer and issue a warning
-+ for the conversion. */
-+
-+static void
-+convert_logical_to_integer (gfc_expr *e)
-+{
-+ if (e->ts.type == BT_LOGICAL)
-+ {
-+ /* Convert to INTEGER */
-+ gfc_typespec t;
-+ t.type = BT_INTEGER;
-+ t.kind = 1;
-+ gfc_convert_type_warn (e, &t, 2, 1);
-+ }
-+}
-+
- /* Resolve an operator expression node. This can involve replacing the
- operation with a user defined function call. */
-
-@@ -4072,6 +4103,12 @@ resolve_operator (gfc_expr *e)
- case INTRINSIC_TIMES:
- case INTRINSIC_DIVIDE:
- case INTRINSIC_POWER:
-+ if (flag_logical_as_integer)
-+ {
-+ convert_logical_to_integer (op1);
-+ convert_logical_to_integer (op2);
-+ }
-+
- if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
- {
- gfc_type_convert_binary (e, 1);
-@@ -4108,6 +4145,13 @@ resolve_operator (gfc_expr *e)
- case INTRINSIC_OR:
- case INTRINSIC_EQV:
- case INTRINSIC_NEQV:
-+
-+ if (flag_logical_as_integer)
-+ {
-+ convert_integer_to_logical (op1);
-+ convert_integer_to_logical (op2);
-+ }
-+
- if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
- {
- e->ts.type = BT_LOGICAL;
-@@ -4158,6 +4202,9 @@ resolve_operator (gfc_expr *e)
- goto simplify_op;
- }
-
-+ if (flag_logical_as_integer)
-+ convert_integer_to_logical (op1);
-+
- if (op1->ts.type == BT_LOGICAL)
- {
- e->ts.type = BT_LOGICAL;
-@@ -4198,6 +4245,12 @@ resolve_operator (gfc_expr *e)
- convert_hollerith_to_character (op2);
- }
-
-+ if (flag_logical_as_integer)
-+ {
-+ convert_logical_to_integer (op1);
-+ convert_logical_to_integer (op2);
-+ }
-+
- if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
- && op1->ts.kind == op2->ts.kind)
- {
-diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
-new file mode 100644
-index 00000000000..938a91d9e9a
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
-@@ -0,0 +1,31 @@
-+! { dg-do run }
-+! { dg-options "-std=legacy -flogical-as-integer" }
-+!
-+! Test conversion between logical and integer for logical operators
-+!
-+! Test case contributed by Jim MacArthur
-+! Modified for -flogical-as-integer by Mark Eggleston
-+!
-+!
-+ PROGRAM logical_integer_conversion
-+ LOGICAL lpos /.true./
-+ INTEGER ineg/0/
-+ INTEGER ires
-+ LOGICAL lres
-+
-+ ! Test Logicals converted to Integers
-+ if ((lpos.AND.ineg).EQ.1) STOP 3
-+ if ((ineg.AND.lpos).NE.0) STOP 4
-+ ires = (.true..AND.0)
-+ if (ires.NE.0) STOP 5
-+ ires = (1.AND..false.)
-+ if (ires.EQ.1) STOP 6
-+
-+ ! Test Integers converted to Logicals
-+ if (lpos.EQ.ineg) STOP 7
-+ if (ineg.EQ.lpos) STOP 8
-+ lres = (.true..EQ.0)
-+ if (lres) STOP 9
-+ lres = (1.EQ..false.)
-+ if (lres) STOP 10
-+ END
-diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
-new file mode 100644
-index 00000000000..9f146202ba5
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
-@@ -0,0 +1,31 @@
-+! { dg-do compile }
-+! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" }
-+!
-+! Based on logical_to_integer_and_vice_versa_1.f but with option disabled
-+! to test for error messages.
-+!
-+! Test case contributed by by Mark Eggleston
-+!
-+!
-+ PROGRAM logical_integer_conversion
-+ LOGICAL lpos /.true./
-+ INTEGER ineg/0/
-+ INTEGER ires
-+ LOGICAL lres
-+
-+ ! Test Logicals converted to Integers
-+ if ((lpos.AND.ineg).EQ.1) STOP 3 ! { dg-error "Operands of logical operator" }
-+ if ((ineg.AND.lpos).NE.0) STOP 4 ! { dg-error "Operands of logical operator" }
-+ ires = (.true..AND.0) ! { dg-error "Operands of logical operator" }
-+ if (ires.NE.0) STOP 5
-+ ires = (1.AND..false.) ! { dg-error "Operands of logical operator" }
-+ if (ires.EQ.1) STOP 6
-+
-+ ! Test Integers converted to Logicals
-+ if (lpos.EQ.ineg) STOP 7 ! { dg-error "Operands of comparison operator" }
-+ if (ineg.EQ.lpos) STOP 8 ! { dg-error "Operands of comparison operator" }
-+ lres = (.true..EQ.0) ! { dg-error "Operands of comparison operator" }
-+ if (lres) STOP 9
-+ lres = (1.EQ..false.) ! { dg-error "Operands of comparison operator" }
-+ if (lres) STOP 10
-+ END
-diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
-new file mode 100644
-index 00000000000..446873eb2dc
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
-@@ -0,0 +1,33 @@
-+! { dg-do compile }
-+! { dg-options "-std=legacy -flogical-as-integer" }
-+!
-+! Test conversion between logical and integer for logical operators
-+!
-+ program test
-+ logical f /.false./
-+ logical t /.true./
-+ real x
-+
-+ x = 7.7
-+ x = x + t*3.0
-+ if (abs(x - 10.7).gt.0.00001) stop 1
-+ x = x + .false.*5.0
-+ if (abs(x - 10.7).gt.0.00001) stop 2
-+ x = x - .true.*5.0
-+ if (abs(x - 5.7).gt.0.00001) stop 3
-+ x = x + t
-+ if (abs(x - 6.7).gt.0.00001) stop 4
-+ x = x + f
-+ if (abs(x - 6.7).gt.0.00001) stop 5
-+ x = x - t
-+ if (abs(x - 5.7).gt.0.00001) stop 6
-+ x = x - f
-+ if (abs(x - 5.7).gt.0.00001) stop 7
-+ x = x**.true.
-+ if (abs(x - 5.7).gt.0.00001) stop 8
-+ x = x**.false.
-+ if (abs(x - 1.0).gt.0.00001) stop 9
-+ x = x/t
-+ if (abs(x - 1.0).gt.0.00001) stop 10
-+ if ((x/.false.).le.huge(x)) stop 11
-+ end
-diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
-new file mode 100644
-index 00000000000..4301a4988d8
---- /dev/null
-+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
-@@ -0,0 +1,33 @@
-+! { dg-do compile }
-+! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" }
-+!
-+! Test conversion between logical and integer for logical operators
-+!
-+ program test
-+ logical f /.false./
-+ logical t /.true./
-+ real x
-+
-+ x = 7.7
-+ x = x + t*3.0 ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 10.7).gt.0.00001) stop 1
-+ x = x + .false.*5.0 ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 10.7).gt.0.00001) stop 2
-+ x = x - .true.*5.0 ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 5.7).gt.0.00001) stop 3
-+ x = x + t ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 6.7).gt.0.00001) stop 4
-+ x = x + f ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 6.7).gt.0.00001) stop 5
-+ x = x - t ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 5.7).gt.0.00001) stop 6
-+ x = x - f ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 5.7).gt.0.00001) stop 7
-+ x = x**.true. ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 5.7).gt.0.00001) stop 8
-+ x = x**.false. ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 1.0).gt.0.00001) stop 9
-+ x = x/t ! { dg-error "Operands of binary numeric" }
-+ if (abs(x - 1.0).gt.0.00001) stop 10
-+ if ((x/.false.).le.huge(x)) stop 11 ! { dg-error "Operands of binary numeric" }
-+ end
---
-2.27.0
-
diff --git a/gcc12-hack.patch b/gcc12-hack.patch
deleted file mode 100644
index e98649e..0000000
--- a/gcc12-hack.patch
+++ /dev/null
@@ -1,126 +0,0 @@
---- libada/Makefile.in.jj 2019-01-09 13:01:18.015608205 +0100
-+++ libada/Makefile.in 2019-01-11 18:16:23.441726931 +0100
-@@ -71,18 +71,40 @@ version := $(shell @get_gcc_base_ver@ $(
- libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
- ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
-
-+DEFAULTMULTIFLAGS :=
-+ifeq ($(MULTISUBDIR),)
-+targ:=$(subst -, ,$(target))
-+arch:=$(word 1,$(targ))
-+ifeq ($(words $(targ)),2)
-+osys:=$(word 2,$(targ))
-+else
-+osys:=$(word 3,$(targ))
-+endif
-+ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),)
-+ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64)
-+DEFAULTMULTIFLAGS := -m64
-+else
-+ifeq ($(strip $(filter-out s390%, $(arch))),)
-+DEFAULTMULTIFLAGS := -m31
-+else
-+DEFAULTMULTIFLAGS := -m32
-+endif
-+endif
-+endif
-+endif
-+
- # exeext should not be used because it's the *host* exeext. We're building
- # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus
- # definitions just in case something slips through the safety net provided
- # by recursive make invocations in gcc/ada/Makefile.in
- LIBADA_FLAGS_TO_PASS = \
- "MAKEOVERRIDES=" \
-- "LDFLAGS=$(LDFLAGS)" \
-+ "LDFLAGS=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \
- "LN_S=$(LN_S)" \
- "SHELL=$(SHELL)" \
-- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
-- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
-- "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \
-+ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
-+ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
-+ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
- "PICFLAG_FOR_TARGET=$(PICFLAG)" \
- "THREAD_KIND=$(THREAD_KIND)" \
- "TRACE=$(TRACE)" \
-@@ -93,7 +115,7 @@ LIBADA_FLAGS_TO_PASS = \
- "exeext=.exeext.should.not.be.used " \
- 'CC=the.host.compiler.should.not.be.needed' \
- "GCC_FOR_TARGET=$(CC)" \
-- "CFLAGS=$(CFLAGS)"
-+ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)"
-
- .PHONY: libada gnatlib gnatlib-shared gnatlib-sjlj gnatlib-zcx osconstool
-
---- config-ml.in.jj 2019-01-09 12:50:16.646501448 +0100
-+++ config-ml.in 2019-01-11 18:16:23.442726914 +0100
-@@ -511,6 +511,8 @@ multi-do:
- ADAFLAGS="$(ADAFLAGS) $${flags}" \
- prefix="$(prefix)" \
- exec_prefix="$(exec_prefix)" \
-+ mandir="$(mandir)" \
-+ infodir="$(infodir)" \
- GOCFLAGS="$(GOCFLAGS) $${flags}" \
- GDCFLAGS="$(GDCFLAGS) $${flags}" \
- CXXFLAGS="$(CXXFLAGS) $${flags}" \
---- libcpp/macro.cc.jj 2019-01-09 13:01:21.420552123 +0100
-+++ libcpp/macro.cc 2019-01-11 18:18:17.736876285 +0100
-@@ -3256,8 +3256,6 @@ static cpp_macro *
- create_iso_definition (cpp_reader *pfile)
- {
- bool following_paste_op = false;
-- const char *paste_op_error_msg =
-- N_("'##' cannot appear at either end of a macro expansion");
- unsigned int num_extra_tokens = 0;
- unsigned nparms = 0;
- cpp_hashnode **params = NULL;
-@@ -3382,7 +3380,9 @@ create_iso_definition (cpp_reader *pfile
- function-like macros, but not at the end. */
- if (following_paste_op)
- {
-- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
-+ cpp_error (pfile, CPP_DL_ERROR,
-+ "'##' cannot appear at either end of a macro "
-+ "expansion");
- goto out;
- }
- if (!vaopt_tracker.completed ())
-@@ -3397,7 +3397,9 @@ create_iso_definition (cpp_reader *pfile
- function-like macros, but not at the beginning. */
- if (macro->count == 1)
- {
-- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
-+ cpp_error (pfile, CPP_DL_ERROR,
-+ "'##' cannot appear at either end of a macro "
-+ "expansion");
- goto out;
- }
-
---- libcpp/expr.cc.jj 2019-01-09 13:01:22.415535734 +0100
-+++ libcpp/expr.cc 2019-01-11 18:16:23.444726882 +0100
-@@ -803,16 +803,17 @@ cpp_classify_number (cpp_reader *pfile,
- if ((result & CPP_N_WIDTH) == CPP_N_LARGE
- && CPP_OPTION (pfile, cpp_warn_long_long))
- {
-- const char *message = CPP_OPTION (pfile, cplusplus)
-- ? N_("use of C++11 long long integer constant")
-- : N_("use of C99 long long integer constant");
--
- if (CPP_OPTION (pfile, c99))
- cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
-- 0, message);
-+ 0, CPP_OPTION (pfile, cplusplus)
-+ ? N_("use of C++11 long long integer constant")
-+ : N_("use of C99 long long integer constant"));
- else
- cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
-- virtual_location, 0, message);
-+ virtual_location, 0,
-+ CPP_OPTION (pfile, cplusplus)
-+ ? N_("use of C++11 long long integer constant")
-+ : N_("use of C99 long long integer constant"));
- }
-
- if ((result & CPP_N_SIZE_T) == CPP_N_SIZE_T
diff --git a/gcc12-isl-dl.patch b/gcc12-isl-dl.patch
deleted file mode 100644
index 824288b..0000000
--- a/gcc12-isl-dl.patch
+++ /dev/null
@@ -1,716 +0,0 @@
---- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
-+++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
-@@ -1063,7 +1063,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
- # and the system's installed libraries.
- LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
- $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
--BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
-+BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
- $(ZLIB) $(ZSTD_LIB)
- # Any system libraries needed just for GNAT.
- SYSLIBS = @GNAT_LIBEXC@
-@@ -2302,6 +2302,15 @@ $(out_object_file): $(out_file)
- $(common_out_object_file): $(common_out_file)
- $(COMPILE) $<
- $(POSTCOMPILE)
-+
-+graphite%.o : \
-+ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
-+graphite.o : \
-+ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
-+graphite%.o : \
-+ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
-+graphite.o : \
-+ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
- #
- # Generate header and source files from the machine description,
- # and compile them.
---- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
-+++ gcc/graphite.h 2022-11-03 19:14:50.369690720 +0100
-@@ -24,6 +24,591 @@ along with GCC; see the file COPYING3.
-
- #include "sese.h"
-
-+#include
-+#include
-+
-+#define DYNSYMS \
-+ DYNSYM (isl_aff_add_coefficient_si); \
-+ DYNSYM (isl_aff_free); \
-+ DYNSYM (isl_aff_get_space); \
-+ DYNSYM (isl_aff_set_coefficient_si); \
-+ DYNSYM (isl_aff_set_constant_si); \
-+ DYNSYM (isl_aff_zero_on_domain); \
-+ /* DYNSYM (isl_band_free); */ \
-+ /* DYNSYM (isl_band_get_children); */ \
-+ /* DYNSYM (isl_band_get_partial_schedule); */ \
-+ /* DYNSYM (isl_band_has_children); */ \
-+ /* DYNSYM (isl_band_list_free); */ \
-+ /* DYNSYM (isl_band_list_get_band); */ \
-+ /* DYNSYM (isl_band_list_get_ctx); */ \
-+ /* DYNSYM (isl_band_list_n_band); */ \
-+ /* DYNSYM (isl_band_n_member); */ \
-+ DYNSYM (isl_basic_map_add_constraint); \
-+ DYNSYM (isl_basic_map_project_out); \
-+ DYNSYM (isl_basic_map_universe); \
-+ DYNSYM (isl_constraint_set_coefficient_si); \
-+ DYNSYM (isl_constraint_set_constant_si); \
-+ DYNSYM (isl_ctx_alloc); \
-+ DYNSYM (isl_ctx_free); \
-+ DYNSYM (isl_equality_alloc); \
-+ DYNSYM (isl_id_alloc); \
-+ DYNSYM (isl_id_copy); \
-+ DYNSYM (isl_id_free); \
-+ DYNSYM (isl_inequality_alloc); \
-+ DYNSYM (isl_local_space_copy); \
-+ DYNSYM (isl_local_space_free); \
-+ DYNSYM (isl_local_space_from_space); \
-+ DYNSYM (isl_local_space_range); \
-+ DYNSYM (isl_map_add_constraint); \
-+ DYNSYM (isl_map_add_dims); \
-+ DYNSYM (isl_map_align_params); \
-+ DYNSYM (isl_map_apply_range); \
-+ DYNSYM (isl_map_copy); \
-+ DYNSYM (isl_map_dim); \
-+ DYNSYM (isl_map_dump); \
-+ DYNSYM (isl_map_equate); \
-+ DYNSYM (isl_map_fix_si); \
-+ DYNSYM (isl_map_flat_product); \
-+ DYNSYM (isl_map_flat_range_product); \
-+ DYNSYM (isl_map_free); \
-+ DYNSYM (isl_map_from_basic_map); \
-+ DYNSYM (isl_map_from_pw_aff); \
-+ DYNSYM (isl_map_from_union_map); \
-+ DYNSYM (isl_map_get_ctx); \
-+ DYNSYM (isl_map_get_space); \
-+ DYNSYM (isl_map_get_tuple_id); \
-+ DYNSYM (isl_map_insert_dims); \
-+ DYNSYM (isl_map_intersect); \
-+ DYNSYM (isl_map_intersect_domain); \
-+ DYNSYM (isl_map_intersect_range); \
-+ DYNSYM (isl_map_is_empty); \
-+ DYNSYM (isl_map_lex_ge); \
-+ DYNSYM (isl_map_lex_le); \
-+ /* DYNSYM (isl_map_n_out); */ \
-+ DYNSYM (isl_map_range); \
-+ DYNSYM (isl_map_set_tuple_id); \
-+ DYNSYM (isl_map_universe); \
-+ DYNSYM (isl_options_set_on_error); \
-+ DYNSYM (isl_options_set_schedule_serialize_sccs); \
-+ DYNSYM (isl_printer_set_yaml_style); \
-+ DYNSYM (isl_options_set_schedule_max_constant_term); \
-+ DYNSYM (isl_options_set_schedule_maximize_band_depth); \
-+ DYNSYM (isl_printer_free); \
-+ DYNSYM (isl_printer_print_aff); \
-+ DYNSYM (isl_printer_print_constraint); \
-+ DYNSYM (isl_printer_print_map); \
-+ DYNSYM (isl_printer_print_set); \
-+ DYNSYM (isl_printer_to_file); \
-+ DYNSYM (isl_pw_aff_add); \
-+ DYNSYM (isl_pw_aff_alloc); \
-+ DYNSYM (isl_pw_aff_copy); \
-+ DYNSYM (isl_pw_aff_eq_set); \
-+ DYNSYM (isl_pw_aff_free); \
-+ DYNSYM (isl_pw_aff_from_aff); \
-+ DYNSYM (isl_pw_aff_ge_set); \
-+ DYNSYM (isl_pw_aff_gt_set); \
-+ DYNSYM (isl_pw_aff_is_cst); \
-+ DYNSYM (isl_pw_aff_le_set); \
-+ DYNSYM (isl_pw_aff_lt_set); \
-+ DYNSYM (isl_pw_aff_mul); \
-+ DYNSYM (isl_pw_aff_ne_set); \
-+ DYNSYM (isl_pw_aff_nonneg_set); \
-+ DYNSYM (isl_pw_aff_set_tuple_id); \
-+ DYNSYM (isl_pw_aff_sub); \
-+ DYNSYM (isl_pw_aff_zero_set); \
-+ DYNSYM (isl_schedule_free); \
-+ /* DYNSYM (isl_schedule_get_band_forest); */ \
-+ DYNSYM (isl_set_add_constraint); \
-+ DYNSYM (isl_set_add_dims); \
-+ DYNSYM (isl_set_apply); \
-+ DYNSYM (isl_set_coalesce); \
-+ DYNSYM (isl_set_copy); \
-+ DYNSYM (isl_set_dim); \
-+ DYNSYM (isl_set_fix_si); \
-+ DYNSYM (isl_set_free); \
-+ DYNSYM (isl_set_get_space); \
-+ DYNSYM (isl_set_get_tuple_id); \
-+ DYNSYM (isl_set_intersect); \
-+ DYNSYM (isl_set_is_empty); \
-+ DYNSYM (isl_set_n_dim); \
-+ DYNSYM (isl_set_nat_universe); \
-+ DYNSYM (isl_set_project_out); \
-+ DYNSYM (isl_set_set_tuple_id); \
-+ DYNSYM (isl_set_universe); \
-+ DYNSYM (isl_space_add_dims); \
-+ DYNSYM (isl_space_alloc); \
-+ DYNSYM (isl_space_copy); \
-+ DYNSYM (isl_space_dim); \
-+ DYNSYM (isl_space_domain); \
-+ DYNSYM (isl_space_find_dim_by_id); \
-+ DYNSYM (isl_space_free); \
-+ DYNSYM (isl_space_from_domain); \
-+ DYNSYM (isl_space_get_tuple_id); \
-+ DYNSYM (isl_space_params_alloc); \
-+ DYNSYM (isl_space_range); \
-+ DYNSYM (isl_space_set_alloc); \
-+ DYNSYM (isl_space_set_dim_id); \
-+ DYNSYM (isl_space_set_tuple_id); \
-+ DYNSYM (isl_union_map_add_map); \
-+ DYNSYM (isl_union_map_align_params); \
-+ DYNSYM (isl_union_map_apply_domain); \
-+ DYNSYM (isl_union_map_apply_range); \
-+ DYNSYM (isl_union_map_compute_flow); \
-+ DYNSYM (isl_union_map_copy); \
-+ DYNSYM (isl_union_map_empty); \
-+ DYNSYM (isl_union_map_flat_range_product); \
-+ DYNSYM (isl_union_map_foreach_map); \
-+ DYNSYM (isl_union_map_free); \
-+ DYNSYM (isl_union_map_from_map); \
-+ DYNSYM (isl_union_map_get_ctx); \
-+ DYNSYM (isl_union_map_get_space); \
-+ DYNSYM (isl_union_map_gist_domain); \
-+ DYNSYM (isl_union_map_gist_range); \
-+ DYNSYM (isl_union_map_intersect_domain); \
-+ DYNSYM (isl_union_map_is_empty); \
-+ DYNSYM (isl_union_map_subtract); \
-+ DYNSYM (isl_union_map_union); \
-+ DYNSYM (isl_union_set_add_set); \
-+ DYNSYM (isl_union_set_compute_schedule); \
-+ DYNSYM (isl_union_set_copy); \
-+ DYNSYM (isl_union_set_empty); \
-+ DYNSYM (isl_union_set_from_set); \
-+ DYNSYM (isl_aff_add_constant_val); \
-+ DYNSYM (isl_aff_get_coefficient_val); \
-+ DYNSYM (isl_aff_get_ctx); \
-+ DYNSYM (isl_aff_mod_val); \
-+ DYNSYM (isl_ast_build_ast_from_schedule); \
-+ DYNSYM (isl_ast_build_free); \
-+ DYNSYM (isl_ast_build_from_context); \
-+ DYNSYM (isl_ast_build_get_ctx); \
-+ DYNSYM (isl_ast_build_get_schedule); \
-+ DYNSYM (isl_ast_build_get_schedule_space); \
-+ DYNSYM (isl_ast_build_set_before_each_for); \
-+ DYNSYM (isl_ast_build_set_options); \
-+ DYNSYM (isl_ast_expr_free); \
-+ DYNSYM (isl_ast_expr_from_val); \
-+ DYNSYM (isl_ast_expr_get_ctx); \
-+ DYNSYM (isl_ast_expr_get_id); \
-+ DYNSYM (isl_ast_expr_get_op_arg); \
-+ DYNSYM (isl_ast_expr_get_op_n_arg); \
-+ DYNSYM (isl_ast_expr_get_op_type); \
-+ DYNSYM (isl_ast_expr_get_type); \
-+ DYNSYM (isl_ast_expr_get_val); \
-+ DYNSYM (isl_ast_expr_sub); \
-+ DYNSYM (isl_ast_node_block_get_children); \
-+ DYNSYM (isl_ast_node_for_get_body); \
-+ DYNSYM (isl_ast_node_for_get_cond); \
-+ DYNSYM (isl_ast_node_for_get_inc); \
-+ DYNSYM (isl_ast_node_for_get_init); \
-+ DYNSYM (isl_ast_node_for_get_iterator); \
-+ DYNSYM (isl_ast_node_free); \
-+ DYNSYM (isl_ast_node_get_annotation); \
-+ DYNSYM (isl_ast_node_get_type); \
-+ DYNSYM (isl_ast_node_if_get_cond); \
-+ DYNSYM (isl_ast_node_if_get_else); \
-+ DYNSYM (isl_ast_node_if_get_then); \
-+ DYNSYM (isl_ast_node_list_free); \
-+ DYNSYM (isl_ast_node_list_get_ast_node); \
-+ DYNSYM (isl_ast_node_list_n_ast_node); \
-+ DYNSYM (isl_ast_node_user_get_expr); \
-+ DYNSYM (isl_constraint_set_coefficient_val); \
-+ DYNSYM (isl_constraint_set_constant_val); \
-+ DYNSYM (isl_id_get_user); \
-+ DYNSYM (isl_local_space_get_ctx); \
-+ DYNSYM (isl_map_fix_val); \
-+ DYNSYM (isl_options_set_ast_build_atomic_upper_bound); \
-+ DYNSYM (isl_printer_print_ast_node); \
-+ DYNSYM (isl_printer_print_str); \
-+ DYNSYM (isl_printer_set_output_format); \
-+ DYNSYM (isl_pw_aff_mod_val); \
-+ DYNSYM (isl_schedule_constraints_compute_schedule); \
-+ DYNSYM (isl_schedule_constraints_on_domain); \
-+ DYNSYM (isl_schedule_constraints_set_coincidence); \
-+ DYNSYM (isl_schedule_constraints_set_proximity); \
-+ DYNSYM (isl_schedule_constraints_set_validity); \
-+ DYNSYM (isl_set_get_dim_id); \
-+ DYNSYM (isl_set_max_val); \
-+ DYNSYM (isl_set_min_val); \
-+ DYNSYM (isl_set_params); \
-+ DYNSYM (isl_space_align_params); \
-+ DYNSYM (isl_space_map_from_domain_and_range); \
-+ DYNSYM (isl_space_set_tuple_name); \
-+ DYNSYM (isl_space_wrap); \
-+ DYNSYM (isl_union_map_from_domain_and_range); \
-+ DYNSYM (isl_union_map_range); \
-+ DYNSYM (isl_union_set_union); \
-+ DYNSYM (isl_union_set_universe); \
-+ DYNSYM (isl_val_2exp); \
-+ DYNSYM (isl_val_add_ui); \
-+ DYNSYM (isl_val_copy); \
-+ DYNSYM (isl_val_free); \
-+ DYNSYM (isl_val_int_from_si); \
-+ DYNSYM (isl_val_int_from_ui); \
-+ DYNSYM (isl_val_mul); \
-+ DYNSYM (isl_val_neg); \
-+ DYNSYM (isl_val_sub); \
-+ DYNSYM (isl_printer_print_union_map); \
-+ DYNSYM (isl_pw_aff_get_ctx); \
-+ DYNSYM (isl_val_is_int); \
-+ DYNSYM (isl_ctx_get_max_operations); \
-+ DYNSYM (isl_ctx_set_max_operations); \
-+ DYNSYM (isl_ctx_last_error); \
-+ DYNSYM (isl_ctx_reset_operations); \
-+ DYNSYM (isl_map_coalesce); \
-+ DYNSYM (isl_printer_print_schedule); \
-+ DYNSYM (isl_set_set_dim_id); \
-+ DYNSYM (isl_union_map_coalesce); \
-+ DYNSYM (isl_multi_val_set_val); \
-+ DYNSYM (isl_multi_val_zero); \
-+ DYNSYM (isl_options_set_schedule_max_coefficient); \
-+ DYNSYM (isl_options_set_tile_scale_tile_loops); \
-+ DYNSYM (isl_schedule_copy); \
-+ DYNSYM (isl_schedule_get_map); \
-+ DYNSYM (isl_schedule_map_schedule_node_bottom_up); \
-+ DYNSYM (isl_schedule_node_band_get_permutable); \
-+ DYNSYM (isl_schedule_node_band_get_space); \
-+ DYNSYM (isl_schedule_node_band_tile); \
-+ DYNSYM (isl_schedule_node_child); \
-+ DYNSYM (isl_schedule_node_free); \
-+ DYNSYM (isl_schedule_node_get_child); \
-+ DYNSYM (isl_schedule_node_get_ctx); \
-+ DYNSYM (isl_schedule_node_get_type); \
-+ DYNSYM (isl_schedule_node_n_children); \
-+ DYNSYM (isl_union_map_is_equal); \
-+ DYNSYM (isl_union_access_info_compute_flow); \
-+ DYNSYM (isl_union_access_info_from_sink); \
-+ DYNSYM (isl_union_access_info_set_may_source); \
-+ DYNSYM (isl_union_access_info_set_must_source); \
-+ DYNSYM (isl_union_access_info_set_schedule); \
-+ DYNSYM (isl_union_flow_free); \
-+ DYNSYM (isl_union_flow_get_may_dependence); \
-+ DYNSYM (isl_union_flow_get_must_dependence); \
-+ DYNSYM (isl_aff_var_on_domain); \
-+ DYNSYM (isl_multi_aff_from_aff); \
-+ DYNSYM (isl_schedule_get_ctx); \
-+ DYNSYM (isl_multi_aff_set_tuple_id); \
-+ DYNSYM (isl_multi_aff_dim); \
-+ DYNSYM (isl_schedule_get_domain); \
-+ DYNSYM (isl_union_set_is_empty); \
-+ DYNSYM (isl_union_set_get_space); \
-+ DYNSYM (isl_union_pw_multi_aff_empty); \
-+ DYNSYM (isl_union_set_foreach_set); \
-+ DYNSYM (isl_union_set_free); \
-+ DYNSYM (isl_multi_union_pw_aff_from_union_pw_multi_aff); \
-+ DYNSYM (isl_multi_union_pw_aff_apply_multi_aff); \
-+ DYNSYM (isl_schedule_insert_partial_schedule); \
-+ DYNSYM (isl_union_pw_multi_aff_free); \
-+ DYNSYM (isl_pw_multi_aff_project_out_map); \
-+ DYNSYM (isl_union_pw_multi_aff_add_pw_multi_aff); \
-+ DYNSYM (isl_schedule_from_domain); \
-+ DYNSYM (isl_schedule_sequence); \
-+ DYNSYM (isl_ast_build_node_from_schedule); \
-+ DYNSYM (isl_ast_node_mark_get_node); \
-+ DYNSYM (isl_schedule_node_band_member_get_ast_loop_type); \
-+ DYNSYM (isl_schedule_node_band_member_set_ast_loop_type); \
-+ DYNSYM (isl_val_n_abs_num_chunks); \
-+ DYNSYM (isl_val_get_abs_num_chunks); \
-+ DYNSYM (isl_val_int_from_chunks); \
-+ DYNSYM (isl_val_is_neg); \
-+ DYNSYM (isl_version); \
-+ DYNSYM (isl_options_get_on_error); \
-+ DYNSYM (isl_ctx_reset_error);
-+
-+extern struct isl_pointers_s__
-+{
-+ bool inited;
-+ void *h;
-+#define DYNSYM(x) __typeof (x) *p_##x
-+ DYNSYMS
-+#undef DYNSYM
-+} isl_pointers__;
-+
-+#define isl_aff_add_coefficient_si (*isl_pointers__.p_isl_aff_add_coefficient_si)
-+#define isl_aff_free (*isl_pointers__.p_isl_aff_free)
-+#define isl_aff_get_space (*isl_pointers__.p_isl_aff_get_space)
-+#define isl_aff_set_coefficient_si (*isl_pointers__.p_isl_aff_set_coefficient_si)
-+#define isl_aff_set_constant_si (*isl_pointers__.p_isl_aff_set_constant_si)
-+#define isl_aff_zero_on_domain (*isl_pointers__.p_isl_aff_zero_on_domain)
-+#define isl_band_free (*isl_pointers__.p_isl_band_free)
-+#define isl_band_get_children (*isl_pointers__.p_isl_band_get_children)
-+#define isl_band_get_partial_schedule (*isl_pointers__.p_isl_band_get_partial_schedule)
-+#define isl_band_has_children (*isl_pointers__.p_isl_band_has_children)
-+#define isl_band_list_free (*isl_pointers__.p_isl_band_list_free)
-+#define isl_band_list_get_band (*isl_pointers__.p_isl_band_list_get_band)
-+#define isl_band_list_get_ctx (*isl_pointers__.p_isl_band_list_get_ctx)
-+#define isl_band_list_n_band (*isl_pointers__.p_isl_band_list_n_band)
-+#define isl_band_n_member (*isl_pointers__.p_isl_band_n_member)
-+#define isl_basic_map_add_constraint (*isl_pointers__.p_isl_basic_map_add_constraint)
-+#define isl_basic_map_project_out (*isl_pointers__.p_isl_basic_map_project_out)
-+#define isl_basic_map_universe (*isl_pointers__.p_isl_basic_map_universe)
-+#define isl_constraint_set_coefficient_si (*isl_pointers__.p_isl_constraint_set_coefficient_si)
-+#define isl_constraint_set_constant_si (*isl_pointers__.p_isl_constraint_set_constant_si)
-+#define isl_ctx_alloc (*isl_pointers__.p_isl_ctx_alloc)
-+#define isl_ctx_free (*isl_pointers__.p_isl_ctx_free)
-+#define isl_equality_alloc (*isl_pointers__.p_isl_equality_alloc)
-+#define isl_id_alloc (*isl_pointers__.p_isl_id_alloc)
-+#define isl_id_copy (*isl_pointers__.p_isl_id_copy)
-+#define isl_id_free (*isl_pointers__.p_isl_id_free)
-+#define isl_inequality_alloc (*isl_pointers__.p_isl_inequality_alloc)
-+#define isl_local_space_copy (*isl_pointers__.p_isl_local_space_copy)
-+#define isl_local_space_free (*isl_pointers__.p_isl_local_space_free)
-+#define isl_local_space_from_space (*isl_pointers__.p_isl_local_space_from_space)
-+#define isl_local_space_range (*isl_pointers__.p_isl_local_space_range)
-+#define isl_map_add_constraint (*isl_pointers__.p_isl_map_add_constraint)
-+#define isl_map_add_dims (*isl_pointers__.p_isl_map_add_dims)
-+#define isl_map_align_params (*isl_pointers__.p_isl_map_align_params)
-+#define isl_map_apply_range (*isl_pointers__.p_isl_map_apply_range)
-+#define isl_map_copy (*isl_pointers__.p_isl_map_copy)
-+#define isl_map_dim (*isl_pointers__.p_isl_map_dim)
-+#define isl_map_dump (*isl_pointers__.p_isl_map_dump)
-+#define isl_map_equate (*isl_pointers__.p_isl_map_equate)
-+#define isl_map_fix_si (*isl_pointers__.p_isl_map_fix_si)
-+#define isl_map_flat_product (*isl_pointers__.p_isl_map_flat_product)
-+#define isl_map_flat_range_product (*isl_pointers__.p_isl_map_flat_range_product)
-+#define isl_map_free (*isl_pointers__.p_isl_map_free)
-+#define isl_map_from_basic_map (*isl_pointers__.p_isl_map_from_basic_map)
-+#define isl_map_from_pw_aff (*isl_pointers__.p_isl_map_from_pw_aff)
-+#define isl_map_from_union_map (*isl_pointers__.p_isl_map_from_union_map)
-+#define isl_map_get_ctx (*isl_pointers__.p_isl_map_get_ctx)
-+#define isl_map_get_space (*isl_pointers__.p_isl_map_get_space)
-+#define isl_map_get_tuple_id (*isl_pointers__.p_isl_map_get_tuple_id)
-+#define isl_map_insert_dims (*isl_pointers__.p_isl_map_insert_dims)
-+#define isl_map_intersect (*isl_pointers__.p_isl_map_intersect)
-+#define isl_map_intersect_domain (*isl_pointers__.p_isl_map_intersect_domain)
-+#define isl_map_intersect_range (*isl_pointers__.p_isl_map_intersect_range)
-+#define isl_map_is_empty (*isl_pointers__.p_isl_map_is_empty)
-+#define isl_map_lex_ge (*isl_pointers__.p_isl_map_lex_ge)
-+#define isl_map_lex_le (*isl_pointers__.p_isl_map_lex_le)
-+#define isl_map_n_out (*isl_pointers__.p_isl_map_n_out)
-+#define isl_map_range (*isl_pointers__.p_isl_map_range)
-+#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id)
-+#define isl_map_universe (*isl_pointers__.p_isl_map_universe)
-+#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error)
-+#define isl_options_set_schedule_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs)
-+#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style)
-+#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term)
-+#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth)
-+#define isl_printer_free (*isl_pointers__.p_isl_printer_free)
-+#define isl_printer_print_aff (*isl_pointers__.p_isl_printer_print_aff)
-+#define isl_printer_print_constraint (*isl_pointers__.p_isl_printer_print_constraint)
-+#define isl_printer_print_map (*isl_pointers__.p_isl_printer_print_map)
-+#define isl_printer_print_set (*isl_pointers__.p_isl_printer_print_set)
-+#define isl_printer_to_file (*isl_pointers__.p_isl_printer_to_file)
-+#define isl_pw_aff_add (*isl_pointers__.p_isl_pw_aff_add)
-+#define isl_pw_aff_alloc (*isl_pointers__.p_isl_pw_aff_alloc)
-+#define isl_pw_aff_copy (*isl_pointers__.p_isl_pw_aff_copy)
-+#define isl_pw_aff_eq_set (*isl_pointers__.p_isl_pw_aff_eq_set)
-+#define isl_pw_aff_free (*isl_pointers__.p_isl_pw_aff_free)
-+#define isl_pw_aff_from_aff (*isl_pointers__.p_isl_pw_aff_from_aff)
-+#define isl_pw_aff_ge_set (*isl_pointers__.p_isl_pw_aff_ge_set)
-+#define isl_pw_aff_gt_set (*isl_pointers__.p_isl_pw_aff_gt_set)
-+#define isl_pw_aff_is_cst (*isl_pointers__.p_isl_pw_aff_is_cst)
-+#define isl_pw_aff_le_set (*isl_pointers__.p_isl_pw_aff_le_set)
-+#define isl_pw_aff_lt_set (*isl_pointers__.p_isl_pw_aff_lt_set)
-+#define isl_pw_aff_mul (*isl_pointers__.p_isl_pw_aff_mul)
-+#define isl_pw_aff_ne_set (*isl_pointers__.p_isl_pw_aff_ne_set)
-+#define isl_pw_aff_nonneg_set (*isl_pointers__.p_isl_pw_aff_nonneg_set)
-+#define isl_pw_aff_set_tuple_id (*isl_pointers__.p_isl_pw_aff_set_tuple_id)
-+#define isl_pw_aff_sub (*isl_pointers__.p_isl_pw_aff_sub)
-+#define isl_pw_aff_zero_set (*isl_pointers__.p_isl_pw_aff_zero_set)
-+#define isl_schedule_free (*isl_pointers__.p_isl_schedule_free)
-+#define isl_schedule_get_band_forest (*isl_pointers__.p_isl_schedule_get_band_forest)
-+#define isl_set_add_constraint (*isl_pointers__.p_isl_set_add_constraint)
-+#define isl_set_add_dims (*isl_pointers__.p_isl_set_add_dims)
-+#define isl_set_apply (*isl_pointers__.p_isl_set_apply)
-+#define isl_set_coalesce (*isl_pointers__.p_isl_set_coalesce)
-+#define isl_set_copy (*isl_pointers__.p_isl_set_copy)
-+#define isl_set_dim (*isl_pointers__.p_isl_set_dim)
-+#define isl_set_fix_si (*isl_pointers__.p_isl_set_fix_si)
-+#define isl_set_free (*isl_pointers__.p_isl_set_free)
-+#define isl_set_get_space (*isl_pointers__.p_isl_set_get_space)
-+#define isl_set_get_tuple_id (*isl_pointers__.p_isl_set_get_tuple_id)
-+#define isl_set_intersect (*isl_pointers__.p_isl_set_intersect)
-+#define isl_set_is_empty (*isl_pointers__.p_isl_set_is_empty)
-+#define isl_set_n_dim (*isl_pointers__.p_isl_set_n_dim)
-+#define isl_set_nat_universe (*isl_pointers__.p_isl_set_nat_universe)
-+#define isl_set_project_out (*isl_pointers__.p_isl_set_project_out)
-+#define isl_set_set_tuple_id (*isl_pointers__.p_isl_set_set_tuple_id)
-+#define isl_set_universe (*isl_pointers__.p_isl_set_universe)
-+#define isl_space_add_dims (*isl_pointers__.p_isl_space_add_dims)
-+#define isl_space_alloc (*isl_pointers__.p_isl_space_alloc)
-+#define isl_space_copy (*isl_pointers__.p_isl_space_copy)
-+#define isl_space_dim (*isl_pointers__.p_isl_space_dim)
-+#define isl_space_domain (*isl_pointers__.p_isl_space_domain)
-+#define isl_space_find_dim_by_id (*isl_pointers__.p_isl_space_find_dim_by_id)
-+#define isl_space_free (*isl_pointers__.p_isl_space_free)
-+#define isl_space_from_domain (*isl_pointers__.p_isl_space_from_domain)
-+#define isl_space_get_tuple_id (*isl_pointers__.p_isl_space_get_tuple_id)
-+#define isl_space_params_alloc (*isl_pointers__.p_isl_space_params_alloc)
-+#define isl_space_range (*isl_pointers__.p_isl_space_range)
-+#define isl_space_set_alloc (*isl_pointers__.p_isl_space_set_alloc)
-+#define isl_space_set_dim_id (*isl_pointers__.p_isl_space_set_dim_id)
-+#define isl_space_set_tuple_id (*isl_pointers__.p_isl_space_set_tuple_id)
-+#define isl_union_map_add_map (*isl_pointers__.p_isl_union_map_add_map)
-+#define isl_union_map_align_params (*isl_pointers__.p_isl_union_map_align_params)
-+#define isl_union_map_apply_domain (*isl_pointers__.p_isl_union_map_apply_domain)
-+#define isl_union_map_apply_range (*isl_pointers__.p_isl_union_map_apply_range)
-+#define isl_union_map_compute_flow (*isl_pointers__.p_isl_union_map_compute_flow)
-+#define isl_union_map_copy (*isl_pointers__.p_isl_union_map_copy)
-+#define isl_union_map_empty (*isl_pointers__.p_isl_union_map_empty)
-+#define isl_union_map_flat_range_product (*isl_pointers__.p_isl_union_map_flat_range_product)
-+#define isl_union_map_foreach_map (*isl_pointers__.p_isl_union_map_foreach_map)
-+#define isl_union_map_free (*isl_pointers__.p_isl_union_map_free)
-+#define isl_union_map_from_map (*isl_pointers__.p_isl_union_map_from_map)
-+#define isl_union_map_get_ctx (*isl_pointers__.p_isl_union_map_get_ctx)
-+#define isl_union_map_get_space (*isl_pointers__.p_isl_union_map_get_space)
-+#define isl_union_map_gist_domain (*isl_pointers__.p_isl_union_map_gist_domain)
-+#define isl_union_map_gist_range (*isl_pointers__.p_isl_union_map_gist_range)
-+#define isl_union_map_intersect_domain (*isl_pointers__.p_isl_union_map_intersect_domain)
-+#define isl_union_map_is_empty (*isl_pointers__.p_isl_union_map_is_empty)
-+#define isl_union_map_subtract (*isl_pointers__.p_isl_union_map_subtract)
-+#define isl_union_map_union (*isl_pointers__.p_isl_union_map_union)
-+#define isl_union_set_add_set (*isl_pointers__.p_isl_union_set_add_set)
-+#define isl_union_set_compute_schedule (*isl_pointers__.p_isl_union_set_compute_schedule)
-+#define isl_union_set_copy (*isl_pointers__.p_isl_union_set_copy)
-+#define isl_union_set_empty (*isl_pointers__.p_isl_union_set_empty)
-+#define isl_union_set_from_set (*isl_pointers__.p_isl_union_set_from_set)
-+#define isl_aff_add_constant_val (*isl_pointers__.p_isl_aff_add_constant_val)
-+#define isl_aff_get_coefficient_val (*isl_pointers__.p_isl_aff_get_coefficient_val)
-+#define isl_aff_get_ctx (*isl_pointers__.p_isl_aff_get_ctx)
-+#define isl_aff_mod_val (*isl_pointers__.p_isl_aff_mod_val)
-+#define isl_ast_build_ast_from_schedule (*isl_pointers__.p_isl_ast_build_ast_from_schedule)
-+#define isl_ast_build_free (*isl_pointers__.p_isl_ast_build_free)
-+#define isl_ast_build_from_context (*isl_pointers__.p_isl_ast_build_from_context)
-+#define isl_ast_build_get_ctx (*isl_pointers__.p_isl_ast_build_get_ctx)
-+#define isl_ast_build_get_schedule (*isl_pointers__.p_isl_ast_build_get_schedule)
-+#define isl_ast_build_get_schedule_space (*isl_pointers__.p_isl_ast_build_get_schedule_space)
-+#define isl_ast_build_set_before_each_for (*isl_pointers__.p_isl_ast_build_set_before_each_for)
-+#define isl_ast_build_set_options (*isl_pointers__.p_isl_ast_build_set_options)
-+#define isl_ast_expr_free (*isl_pointers__.p_isl_ast_expr_free)
-+#define isl_ast_expr_from_val (*isl_pointers__.p_isl_ast_expr_from_val)
-+#define isl_ast_expr_get_ctx (*isl_pointers__.p_isl_ast_expr_get_ctx)
-+#define isl_ast_expr_get_id (*isl_pointers__.p_isl_ast_expr_get_id)
-+#define isl_ast_expr_get_op_arg (*isl_pointers__.p_isl_ast_expr_get_op_arg)
-+#define isl_ast_expr_get_op_n_arg (*isl_pointers__.p_isl_ast_expr_get_op_n_arg)
-+#define isl_ast_expr_get_op_type (*isl_pointers__.p_isl_ast_expr_get_op_type)
-+#define isl_ast_expr_get_type (*isl_pointers__.p_isl_ast_expr_get_type)
-+#define isl_ast_expr_get_val (*isl_pointers__.p_isl_ast_expr_get_val)
-+#define isl_ast_expr_sub (*isl_pointers__.p_isl_ast_expr_sub)
-+#define isl_ast_node_block_get_children (*isl_pointers__.p_isl_ast_node_block_get_children)
-+#define isl_ast_node_for_get_body (*isl_pointers__.p_isl_ast_node_for_get_body)
-+#define isl_ast_node_for_get_cond (*isl_pointers__.p_isl_ast_node_for_get_cond)
-+#define isl_ast_node_for_get_inc (*isl_pointers__.p_isl_ast_node_for_get_inc)
-+#define isl_ast_node_for_get_init (*isl_pointers__.p_isl_ast_node_for_get_init)
-+#define isl_ast_node_for_get_iterator (*isl_pointers__.p_isl_ast_node_for_get_iterator)
-+#define isl_ast_node_free (*isl_pointers__.p_isl_ast_node_free)
-+#define isl_ast_node_get_annotation (*isl_pointers__.p_isl_ast_node_get_annotation)
-+#define isl_ast_node_get_type (*isl_pointers__.p_isl_ast_node_get_type)
-+#define isl_ast_node_if_get_cond (*isl_pointers__.p_isl_ast_node_if_get_cond)
-+#define isl_ast_node_if_get_else (*isl_pointers__.p_isl_ast_node_if_get_else)
-+#define isl_ast_node_if_get_then (*isl_pointers__.p_isl_ast_node_if_get_then)
-+#define isl_ast_node_list_free (*isl_pointers__.p_isl_ast_node_list_free)
-+#define isl_ast_node_list_get_ast_node (*isl_pointers__.p_isl_ast_node_list_get_ast_node)
-+#define isl_ast_node_list_n_ast_node (*isl_pointers__.p_isl_ast_node_list_n_ast_node)
-+#define isl_ast_node_user_get_expr (*isl_pointers__.p_isl_ast_node_user_get_expr)
-+#define isl_constraint_set_coefficient_val (*isl_pointers__.p_isl_constraint_set_coefficient_val)
-+#define isl_constraint_set_constant_val (*isl_pointers__.p_isl_constraint_set_constant_val)
-+#define isl_id_get_user (*isl_pointers__.p_isl_id_get_user)
-+#define isl_local_space_get_ctx (*isl_pointers__.p_isl_local_space_get_ctx)
-+#define isl_map_fix_val (*isl_pointers__.p_isl_map_fix_val)
-+#define isl_options_set_ast_build_atomic_upper_bound (*isl_pointers__.p_isl_options_set_ast_build_atomic_upper_bound)
-+#define isl_printer_print_ast_node (*isl_pointers__.p_isl_printer_print_ast_node)
-+#define isl_printer_print_str (*isl_pointers__.p_isl_printer_print_str)
-+#define isl_printer_set_output_format (*isl_pointers__.p_isl_printer_set_output_format)
-+#define isl_pw_aff_mod_val (*isl_pointers__.p_isl_pw_aff_mod_val)
-+#define isl_schedule_constraints_compute_schedule (*isl_pointers__.p_isl_schedule_constraints_compute_schedule)
-+#define isl_schedule_constraints_on_domain (*isl_pointers__.p_isl_schedule_constraints_on_domain)
-+#define isl_schedule_constraints_set_coincidence (*isl_pointers__.p_isl_schedule_constraints_set_coincidence)
-+#define isl_schedule_constraints_set_proximity (*isl_pointers__.p_isl_schedule_constraints_set_proximity)
-+#define isl_schedule_constraints_set_validity (*isl_pointers__.p_isl_schedule_constraints_set_validity)
-+#define isl_set_get_dim_id (*isl_pointers__.p_isl_set_get_dim_id)
-+#define isl_set_max_val (*isl_pointers__.p_isl_set_max_val)
-+#define isl_set_min_val (*isl_pointers__.p_isl_set_min_val)
-+#define isl_set_params (*isl_pointers__.p_isl_set_params)
-+#define isl_space_align_params (*isl_pointers__.p_isl_space_align_params)
-+#define isl_space_map_from_domain_and_range (*isl_pointers__.p_isl_space_map_from_domain_and_range)
-+#define isl_space_set_tuple_name (*isl_pointers__.p_isl_space_set_tuple_name)
-+#define isl_space_wrap (*isl_pointers__.p_isl_space_wrap)
-+#define isl_union_map_from_domain_and_range (*isl_pointers__.p_isl_union_map_from_domain_and_range)
-+#define isl_union_map_range (*isl_pointers__.p_isl_union_map_range)
-+#define isl_union_set_union (*isl_pointers__.p_isl_union_set_union)
-+#define isl_union_set_universe (*isl_pointers__.p_isl_union_set_universe)
-+#define isl_val_2exp (*isl_pointers__.p_isl_val_2exp)
-+#define isl_val_add_ui (*isl_pointers__.p_isl_val_add_ui)
-+#define isl_val_copy (*isl_pointers__.p_isl_val_copy)
-+#define isl_val_free (*isl_pointers__.p_isl_val_free)
-+#define isl_val_int_from_si (*isl_pointers__.p_isl_val_int_from_si)
-+#define isl_val_int_from_ui (*isl_pointers__.p_isl_val_int_from_ui)
-+#define isl_val_mul (*isl_pointers__.p_isl_val_mul)
-+#define isl_val_neg (*isl_pointers__.p_isl_val_neg)
-+#define isl_val_sub (*isl_pointers__.p_isl_val_sub)
-+#define isl_printer_print_union_map (*isl_pointers__.p_isl_printer_print_union_map)
-+#define isl_pw_aff_get_ctx (*isl_pointers__.p_isl_pw_aff_get_ctx)
-+#define isl_val_is_int (*isl_pointers__.p_isl_val_is_int)
-+#define isl_ctx_get_max_operations (*isl_pointers__.p_isl_ctx_get_max_operations)
-+#define isl_ctx_set_max_operations (*isl_pointers__.p_isl_ctx_set_max_operations)
-+#define isl_ctx_last_error (*isl_pointers__.p_isl_ctx_last_error)
-+#define isl_ctx_reset_operations (*isl_pointers__.p_isl_ctx_reset_operations)
-+#define isl_map_coalesce (*isl_pointers__.p_isl_map_coalesce)
-+#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule)
-+#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id)
-+#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce)
-+#define isl_multi_val_set_val (*isl_pointers__.p_isl_multi_val_set_val)
-+#define isl_multi_val_zero (*isl_pointers__.p_isl_multi_val_zero)
-+#define isl_options_set_schedule_max_coefficient (*isl_pointers__.p_isl_options_set_schedule_max_coefficient)
-+#define isl_options_set_tile_scale_tile_loops (*isl_pointers__.p_isl_options_set_tile_scale_tile_loops)
-+#define isl_schedule_copy (*isl_pointers__.p_isl_schedule_copy)
-+#define isl_schedule_get_map (*isl_pointers__.p_isl_schedule_get_map)
-+#define isl_schedule_map_schedule_node_bottom_up (*isl_pointers__.p_isl_schedule_map_schedule_node_bottom_up)
-+#define isl_schedule_node_band_get_permutable (*isl_pointers__.p_isl_schedule_node_band_get_permutable)
-+#define isl_schedule_node_band_get_space (*isl_pointers__.p_isl_schedule_node_band_get_space)
-+#define isl_schedule_node_band_tile (*isl_pointers__.p_isl_schedule_node_band_tile)
-+#define isl_schedule_node_child (*isl_pointers__.p_isl_schedule_node_child)
-+#define isl_schedule_node_free (*isl_pointers__.p_isl_schedule_node_free)
-+#define isl_schedule_node_get_child (*isl_pointers__.p_isl_schedule_node_get_child)
-+#define isl_schedule_node_get_ctx (*isl_pointers__.p_isl_schedule_node_get_ctx)
-+#define isl_schedule_node_get_type (*isl_pointers__.p_isl_schedule_node_get_type)
-+#define isl_schedule_node_n_children (*isl_pointers__.p_isl_schedule_node_n_children)
-+#define isl_union_map_is_equal (*isl_pointers__.p_isl_union_map_is_equal)
-+#define isl_union_access_info_compute_flow (*isl_pointers__.p_isl_union_access_info_compute_flow)
-+#define isl_union_access_info_from_sink (*isl_pointers__.p_isl_union_access_info_from_sink)
-+#define isl_union_access_info_set_may_source (*isl_pointers__.p_isl_union_access_info_set_may_source)
-+#define isl_union_access_info_set_must_source (*isl_pointers__.p_isl_union_access_info_set_must_source)
-+#define isl_union_access_info_set_schedule (*isl_pointers__.p_isl_union_access_info_set_schedule)
-+#define isl_union_flow_free (*isl_pointers__.p_isl_union_flow_free)
-+#define isl_union_flow_get_may_dependence (*isl_pointers__.p_isl_union_flow_get_may_dependence)
-+#define isl_union_flow_get_must_dependence (*isl_pointers__.p_isl_union_flow_get_must_dependence)
-+#define isl_aff_var_on_domain (*isl_pointers__.p_isl_aff_var_on_domain)
-+#define isl_multi_aff_from_aff (*isl_pointers__.p_isl_multi_aff_from_aff)
-+#define isl_schedule_get_ctx (*isl_pointers__.p_isl_schedule_get_ctx)
-+#define isl_multi_aff_set_tuple_id (*isl_pointers__.p_isl_multi_aff_set_tuple_id)
-+#define isl_multi_aff_dim (*isl_pointers__.p_isl_multi_aff_dim)
-+#define isl_schedule_get_domain (*isl_pointers__.p_isl_schedule_get_domain)
-+#define isl_union_set_is_empty (*isl_pointers__.p_isl_union_set_is_empty)
-+#define isl_union_set_get_space (*isl_pointers__.p_isl_union_set_get_space)
-+#define isl_union_pw_multi_aff_empty (*isl_pointers__.p_isl_union_pw_multi_aff_empty)
-+#define isl_union_set_foreach_set (*isl_pointers__.p_isl_union_set_foreach_set)
-+#define isl_union_set_free (*isl_pointers__.p_isl_union_set_free)
-+#define isl_multi_union_pw_aff_from_union_pw_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_from_union_pw_multi_aff)
-+#define isl_multi_union_pw_aff_apply_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_apply_multi_aff)
-+#define isl_schedule_insert_partial_schedule (*isl_pointers__.p_isl_schedule_insert_partial_schedule)
-+#define isl_union_pw_multi_aff_free (*isl_pointers__.p_isl_union_pw_multi_aff_free)
-+#define isl_pw_multi_aff_project_out_map (*isl_pointers__.p_isl_pw_multi_aff_project_out_map)
-+#define isl_union_pw_multi_aff_add_pw_multi_aff (*isl_pointers__.p_isl_union_pw_multi_aff_add_pw_multi_aff)
-+#define isl_schedule_from_domain (*isl_pointers__.p_isl_schedule_from_domain)
-+#define isl_schedule_sequence (*isl_pointers__.p_isl_schedule_sequence)
-+#define isl_ast_build_node_from_schedule (*isl_pointers__.p_isl_ast_build_node_from_schedule)
-+#define isl_ast_node_mark_get_node (*isl_pointers__.p_isl_ast_node_mark_get_node)
-+#define isl_schedule_node_band_member_get_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_get_ast_loop_type)
-+#define isl_schedule_node_band_member_set_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_set_ast_loop_type)
-+#define isl_val_n_abs_num_chunks (*isl_pointers__.p_isl_val_n_abs_num_chunks)
-+#define isl_val_get_abs_num_chunks (*isl_pointers__.p_isl_val_get_abs_num_chunks)
-+#define isl_val_int_from_chunks (*isl_pointers__.p_isl_val_int_from_chunks)
-+#define isl_val_is_neg (*isl_pointers__.p_isl_val_is_neg)
-+#define isl_version (*isl_pointers__.p_isl_version)
-+#define isl_options_get_on_error (*isl_pointers__.p_isl_options_get_on_error)
-+#define isl_ctx_reset_error (*isl_pointers__.p_isl_ctx_reset_error)
-+
- typedef struct poly_dr *poly_dr_p;
-
- typedef struct poly_bb *poly_bb_p;
-@@ -448,5 +1033,6 @@ extern tree cached_scalar_evolution_in_r
- extern void dot_all_sese (FILE *, vec &);
- extern void dot_sese (sese_l &);
- extern void dot_cfg ();
-+extern const char *get_isl_version (bool);
-
- #endif
---- gcc/graphite.cc.jj 2015-11-04 14:15:32.000000000 +0100
-+++ gcc/graphite.cc 2015-11-04 14:56:02.645536409 +0100
-@@ -60,6 +60,35 @@ along with GCC; see the file COPYING3.
- #include "tree-into-ssa.h"
- #include "graphite.h"
-
-+__typeof (isl_pointers__) isl_pointers__;
-+
-+static bool
-+init_isl_pointers (void)
-+{
-+ void *h;
-+
-+ if (isl_pointers__.inited)
-+ return isl_pointers__.h != NULL;
-+ h = dlopen ("libisl.so.23", RTLD_LAZY);
-+ isl_pointers__.h = h;
-+ if (h == NULL)
-+ return false;
-+#define DYNSYM(x) \
-+ do \
-+ { \
-+ union { __typeof (isl_pointers__.p_##x) p; void *q; } u; \
-+ u.q = dlsym (h, #x); \
-+ if (u.q == NULL) \
-+ return false; \
-+ isl_pointers__.p_##x = u.p; \
-+ } \
-+ while (0)
-+ DYNSYMS
-+#undef DYNSYM
-+ isl_pointers__.inited = true;
-+ return true;
-+}
-+
- /* Print global statistics to FILE. */
-
- static void
-@@ -365,6 +394,15 @@ graphite_transform_loops (void)
- if (parallelized_function_p (cfun->decl))
- return;
-
-+ if (number_of_loops (cfun) <= 1)
-+ return;
-+
-+ if (!init_isl_pointers ())
-+ {
-+ sorry ("Graphite loop optimizations cannot be used");
-+ return;
-+ }
-+
- calculate_dominance_info (CDI_DOMINATORS);
-
- /* We rely on post-dominators during merging of SESE regions so those
-@@ -455,6 +493,14 @@ graphite_transform_loops (void)
- }
- }
-
-+const char *
-+get_isl_version (bool force)
-+{
-+ if (force)
-+ init_isl_pointers ();
-+ return (isl_pointers__.inited && isl_version) ? isl_version () : "none";
-+}
-+
- #else /* If isl is not available: #ifndef HAVE_isl. */
-
- static void
---- gcc/toplev.cc.jj 2017-02-19 13:02:31.000000000 +0100
-+++ gcc/toplev.cc 2017-02-19 16:50:25.536301350 +0100
-@@ -94,6 +94,7 @@ along with GCC; see the file COPYING3.
-
- #ifdef HAVE_isl
- #include
-+extern const char *get_isl_version (bool);
- #endif
-
- static void general_init (const char *, bool);
-@@ -683,7 +684,7 @@ print_version (FILE *file, const char *i
- #ifndef HAVE_isl
- "none"
- #else
-- isl_version ()
-+ get_isl_version (*indent == 0)
- #endif
- );
- if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
diff --git a/gcc12-isl-dl2.patch b/gcc12-isl-dl2.patch
deleted file mode 100644
index 2e12499..0000000
--- a/gcc12-isl-dl2.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-2011-04-04 Jakub Jelinek
-
- * toplev.cc (toplev_main_argv): New variable.
- (toplev_main): Initialize it.
- * graphite.cc (init_isl_pointers): Load libisl.so.23 from gcc's private
- directory.
-
---- gcc/toplev.cc.jj 2008-12-09 23:59:10.000000000 +0100
-+++ gcc/toplev.cc 2009-01-27 14:33:52.000000000 +0100
-@@ -113,6 +113,8 @@ static void finalize (bool);
- static void crash_signal (int) ATTRIBUTE_NORETURN;
- static void compile_file (void);
-
-+const char **toplev_main_argv;
-+
- /* Decoded options, and number of such options. */
- struct cl_decoded_option *save_decoded_options;
- unsigned int save_decoded_options_count;
-@@ -2239,6 +2241,8 @@ toplev::main (int argc, char **argv)
-
- expandargv (&argc, &argv);
-
-+ toplev_main_argv = CONST_CAST2 (const char **, char **, argv);
-+
- /* Initialization of GCC's environment, and diagnostics. */
- general_init (argv[0], m_init_signals);
-
---- gcc/graphite.cc.jj 2010-12-01 10:24:32.000000000 -0500
-+++ gcc/graphite.cc 2010-12-01 11:46:07.832118193 -0500
-@@ -64,11 +64,39 @@ __typeof (isl_pointers__) isl_pointers__
- static bool
- init_isl_pointers (void)
- {
-- void *h;
-+ void *h = NULL;
-+ extern const char **toplev_main_argv;
-+ char *buf, *p;
-+ size_t len;
-
- if (isl_pointers__.inited)
- return isl_pointers__.h != NULL;
-- h = dlopen ("libisl.so.23", RTLD_LAZY);
-+ len = progname - toplev_main_argv[0];
-+ buf = XALLOCAVAR (char, len + sizeof "libisl.so.23");
-+ memcpy (buf, toplev_main_argv[0], len);
-+ strcpy (buf + len, "libisl.so.23");
-+ len += sizeof "libisl.so.23";
-+ p = strstr (buf, "/libexec/");
-+ if (p != NULL)
-+ {
-+ while (1)
-+ {
-+ char *q = strstr (p + 8, "/libexec/");
-+ if (q == NULL)
-+ break;
-+ p = q;
-+ }
-+ memmove (p + 4, p + 8, len - (p + 8 - buf));
-+ h = dlopen (buf, RTLD_LAZY);
-+ if (h == NULL)
-+ {
-+ len = progname - toplev_main_argv[0];
-+ memcpy (buf, toplev_main_argv[0], len);
-+ strcpy (buf + len, "libisl.so.23");
-+ }
-+ }
-+ if (h == NULL)
-+ h = dlopen (buf, RTLD_LAZY);
- isl_pointers__.h = h;
- if (h == NULL)
- return false;
diff --git a/gcc12-libgomp-omp_h-multilib.patch b/gcc12-libgomp-omp_h-multilib.patch
deleted file mode 100644
index d0e98d1..0000000
--- a/gcc12-libgomp-omp_h-multilib.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-2008-06-09 Jakub Jelinek
-
- * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs.
-
---- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200
-+++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200
-@@ -42,8 +42,8 @@ typedef struct
-
- typedef struct
- {
-- unsigned char _x[@OMP_NEST_LOCK_SIZE@]
-- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@)));
-+ unsigned char _x[8 + sizeof (void *)]
-+ __attribute__((__aligned__(sizeof (void *))));
- } omp_nest_lock_t;
- #endif
-
diff --git a/gcc12-libstdc++-docs.patch b/gcc12-libstdc++-docs.patch
deleted file mode 100644
index b6c2d50..0000000
--- a/gcc12-libstdc++-docs.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- libstdc++-v3/doc/html/index.html.jj 2011-01-03 12:53:21.282829010 +0100
-+++ libstdc++-v3/doc/html/index.html 2011-01-04 18:06:28.999851145 +0100
-@@ -5,6 +5,8 @@
- FSF
-
-
-+ Release 12.2.1
-+
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation
- License, Version 1.2 or any later version published by the
---- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100
-+++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100
-@@ -20,7 +20,9 @@
- member functions for the library classes, finding out what is in a
- particular include file, looking at inheritance diagrams, etc.
-
-- The API documentation, rendered into HTML, can be viewed online
-+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 12.2.1 release,
-+ online
- for each GCC release
- and
-
diff --git a/gcc12-libtool-no-rpath.patch b/gcc12-libtool-no-rpath.patch
deleted file mode 100644
index 466c661..0000000
--- a/gcc12-libtool-no-rpath.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-libtool sucks.
---- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100
-+++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200
-@@ -5394,6 +5394,7 @@ EOF
- rpath="$finalize_rpath"
- test "$mode" != relink && rpath="$compile_rpath$rpath"
- for libdir in $rpath; do
-+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
-@@ -6071,6 +6072,7 @@ EOF
- rpath=
- hardcode_libdirs=
- for libdir in $compile_rpath $finalize_rpath; do
-+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
-@@ -6120,6 +6122,7 @@ EOF
- rpath=
- hardcode_libdirs=
- for libdir in $finalize_rpath; do
-+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
- if test -n "$hardcode_libdir_flag_spec"; then
- if test -n "$hardcode_libdir_separator"; then
- if test -z "$hardcode_libdirs"; then
diff --git a/gcc12-no-add-needed.patch b/gcc12-no-add-needed.patch
deleted file mode 100644
index 5817299..0000000
--- a/gcc12-no-add-needed.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-2010-02-08 Roland McGrath
-
- * config/gnu-user.h (LINK_EH_SPEC): Pass --no-add-needed to the linker.
- * config/alpha/elf.h (LINK_EH_SPEC): Likewise.
- * config/ia64/linux.h (LINK_EH_SPEC): Likewise.
-
---- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100
-+++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100
-@@ -168,5 +168,5 @@ extern int alpha_this_gpdisp_sequence_nu
- I imagine that other systems will catch up. In the meantime, it
- doesn't harm to make sure that the data exists to be used later. */
- #if defined(HAVE_LD_EH_FRAME_HDR)
--#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
-+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
- #endif
---- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100
-+++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100
-@@ -76,7 +76,7 @@ do { \
- Signalize that because we have fde-glibc, we don't need all C shared libs
- linked against -lgcc_s. */
- #undef LINK_EH_SPEC
--#define LINK_EH_SPEC ""
-+#define LINK_EH_SPEC "--no-add-needed "
-
- #undef TARGET_INIT_LIBFUNCS
- #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs
---- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100
-+++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100
-@@ -106,7 +106,7 @@ see the files COPYING3 and COPYING.RUNTI
- #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
-
- #if defined(HAVE_LD_EH_FRAME_HDR)
--#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
-+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
- #endif
-
- #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \
diff --git a/gcc12-pr107468.patch b/gcc12-pr107468.patch
deleted file mode 100644
index 0949b11..0000000
--- a/gcc12-pr107468.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-libstdc++: Update from latest fast_float [PR107468]
-
-The following patch is a cherry-pick from
-https://github.com/fastfloat/fast_float/pull/153
-to restrict fast_float Clinger's fast path to when rounding mode
-is FE_TONEAREST.
-Using std::fegetround showed in benchmarks too slow, so instead
-it uses a check with 2 float additions and comparison to verify
-if rounding is FE_TONEAREST.
-
-2022-11-20 Jakub Jelinek
-
- PR libstdc++/107468
- * src/c++17/fast_float/fast_float.h (detail::rounds_to_nearest): New
- function, taken from https://github.com/fastfloat/fast_float/pull/153.
- (from_chars_advanced): Only use Clinger's fast path if
- detail::rounds_to_nearest().
- * testsuite/20_util/from_chars/pr107468.cc: New test.
-
---- libstdc++-v3/src/c++17/fast_float/fast_float.h.jj 2022-04-28 15:56:18.315632888 +0200
-+++ libstdc++-v3/src/c++17/fast_float/fast_float.h 2022-11-20 18:53:49.570830249 +0100
-@@ -2842,6 +2842,48 @@ from_chars_result parse_infnan(const cha
- return answer;
- }
-
-+/**
-+ * Returns true if the floating-pointing rounding mode is to 'nearest'.
-+ * It is the default on most system. This function is meant to be inexpensive.
-+ * Credit : @mwalcott3
-+ */
-+fastfloat_really_inline bool rounds_to_nearest() noexcept {
-+ // See
-+ // A fast function to check your floating-point rounding mode
-+ // https://lemire.me/blog/2022/11/16/a-fast-function-to-check-your-floating-point-rounding-mode/
-+ //
-+ // This function is meant to be equivalent to :
-+ // prior: #include
-+ // return fegetround() == FE_TONEAREST;
-+ // However, it is expected to be much faster than the fegetround()
-+ // function call.
-+ //
-+ // The volatile keywoard prevents the compiler from computing the function
-+ // at compile-time.
-+ // There might be other ways to prevent compile-time optimizations (e.g., asm).
-+ // The value does not need to be std::numeric_limits::min(), any small
-+ // value so that 1 + x should round to 1 would do (after accounting for excess
-+ // precision, as in 387 instructions).
-+ static volatile float fmin = std::numeric_limits::min();
-+ float fmini = fmin; // we copy it so that it gets loaded at most once.
-+ //
-+ // Explanation:
-+ // Only when fegetround() == FE_TONEAREST do we have that
-+ // fmin + 1.0f == 1.0f - fmin.
-+ //
-+ // FE_UPWARD:
-+ // fmin + 1.0f > 1
-+ // 1.0f - fmin == 1
-+ //
-+ // FE_DOWNWARD or FE_TOWARDZERO:
-+ // fmin + 1.0f == 1
-+ // 1.0f - fmin < 1
-+ //
-+ // Note: This may fail to be accurate if fast-math has been
-+ // enabled, as rounding conventions may not apply.
-+ return (fmini + 1.0f == 1.0f - fmini);
-+}
-+
- } // namespace detail
-
- template
-@@ -2870,7 +2912,7 @@ from_chars_result from_chars_advanced(co
- answer.ec = std::errc(); // be optimistic
- answer.ptr = pns.lastmatch;
- // Next is Clinger's fast path.
-- if (binary_format::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format::max_exponent_fast_path() && pns.mantissa <=binary_format::max_mantissa_fast_path() && !pns.too_many_digits) {
-+ if (binary_format::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format::max_exponent_fast_path() && pns.mantissa <=binary_format::max_mantissa_fast_path() && !pns.too_many_digits && detail::rounds_to_nearest()) {
- value = T(pns.mantissa);
- if (pns.exponent < 0) { value = value / binary_format::exact_power_of_ten(-pns.exponent); }
- else { value = value * binary_format::exact_power_of_ten(pns.exponent); }
---- libstdc++-v3/testsuite/20_util/from_chars/pr107468.cc.jj
-+++ libstdc++-v3/testsuite/20_util/from_chars/pr107468.cc
-@@ -0,0 +1,42 @@
-+// Copyright (C) 2022 Free Software Foundation, Inc.
-+//
-+// This file is part of the GNU ISO C++ Library. This library is free
-+// software; you can redistribute it and/or modify it under the
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 3, or (at your option)
-+// any later version.
-+
-+// This 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 General Public License for more details.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING3. If not see
-+// .
-+
-+// { dg-do run { target c++17 } }
-+// { dg-add-options ieee }
-+
-+#include
-+#include
-+#include
-+#include
-+
-+int
-+main()
-+{
-+ // FP from_char not available otherwise.
-+#if __cpp_lib_to_chars >= 201611L \
-+ && _GLIBCXX_USE_C99_FENV_TR1 \
-+ && defined(FE_DOWNWARD) \
-+ && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
-+ // PR libstdc++/107468
-+ float f;
-+ char buf[] = "3.355447e+07";
-+ std::fesetround(FE_DOWNWARD);
-+ auto [ptr, ec] = std::from_chars(buf, buf + sizeof(buf) - 1, f, std::chars_format::scientific);
-+ VERIFY( ec == std::errc() && ptr == buf + sizeof(buf) - 1 );
-+ VERIFY( f == 33554472.0f );
-+#endif
-+}
diff --git a/gcc12-rh1574936.patch b/gcc12-rh1574936.patch
deleted file mode 100644
index 6b4be0c..0000000
--- a/gcc12-rh1574936.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-crt files and statically linked libgcc objects cause false positives
-in annobin coverage, so we add the assembler flag to generate notes
-for them.
-
-The patch also adds notes to libgcc_s.so, but this is harmless because
-these notes only confer that there is no other annobin markup.
-
-2018-07-25 Florian Weimer
-
- * Makefile.in (LIBGCC2_CFLAGS, CRTSTUFF_CFLAGS): Add
- -Wa,--generate-missing-build-notes=yes.
-
---- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100
-+++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200
-@@ -246,6 +246,7 @@ LIBGCC2_DEBUG_CFLAGS = -g
- LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
- $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \
- -fbuilding-libgcc -fno-stack-protector \
-+ -Wa,--generate-missing-build-notes=yes \
- $(INHIBIT_LIBC_CFLAGS)
-
- # Additional options to use when compiling libgcc2.a.
-@@ -301,6 +302,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(IN
- $(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
- -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
- -fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \
-+ -Wa,--generate-missing-build-notes=yes \
- $(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY)
-
- # Extra flags to use when compiling crt{begin,end}.o.
diff --git a/gcc12-sparc-config-detection.patch b/gcc12-sparc-config-detection.patch
deleted file mode 100644
index bb06b35..0000000
--- a/gcc12-sparc-config-detection.patch
+++ /dev/null
@@ -1,40 +0,0 @@
---- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500
-+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500
-@@ -2790,7 +2790,7 @@ sparc-*-rtems*)
- tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
- tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems"
- ;;
--sparc-*-linux*)
-+sparc-*-linux* | sparcv9-*-linux*)
- tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h"
- extra_options="${extra_options} sparc/long-double-switch.opt"
- case ${target} in
-@@ -2844,7 +2844,7 @@ sparc64-*-rtems*)
- extra_options="${extra_options}"
- tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64"
- ;;
--sparc64-*-linux*)
-+sparc64*-*-linux*)
- tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default64.h sparc/linux64.h sparc/tso.h"
- extra_options="${extra_options} sparc/long-double-switch.opt"
- tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64"
---- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500
-+++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500
-@@ -1002,7 +1002,7 @@ sparc-*-elf*)
- tmake_file="${tmake_file} t-fdpbit t-crtfm"
- extra_parts="$extra_parts crti.o crtn.o crtfastmath.o"
- ;;
--sparc-*-linux*) # SPARC's running GNU/Linux, libc6
-+sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6
- tmake_file="${tmake_file} t-crtfm"
- if test "${host_address}" = 64; then
- tmake_file="$tmake_file sparc/t-linux64"
-@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
- tmake_file="$tmake_file t-crtfm"
- extra_parts="$extra_parts crtfastmath.o"
- ;;
--sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
-+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux
- extra_parts="$extra_parts crtfastmath.o"
- tmake_file="${tmake_file} t-crtfm sparc/t-linux"
- if test "${host_address}" = 64; then
diff --git a/gcc13-Wno-format-security.patch b/gcc13-Wno-format-security.patch
new file mode 100644
index 0000000..4c71dac
--- /dev/null
+++ b/gcc13-Wno-format-security.patch
@@ -0,0 +1,62 @@
+2022-01-07 Jakub Jelinek
+
+ * Makefile.tpl (GOCFLAGS, GDCFLAGS): Filter out -Wformat-security.
+ * Makefile.in: Regenerated.
+
+2017-02-25 Jakub Jelinek
+
+ * configure.ac: When adding -Wno-format, also add -Wno-format-security.
+ * configure: Regenerated.
+
+--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100
++++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100
+@@ -570,7 +570,7 @@ AC_ARG_ENABLE(build-format-warnings,
+ AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
+ [],[enable_build_format_warnings=yes])
+ AS_IF([test $enable_build_format_warnings = no],
+- [wf_opt=-Wno-format],[wf_opt=])
++ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
+ ACX_PROG_CXX_WARNING_OPTS(
+ m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
+ [-Wcast-qual $wf_opt])),
+--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100
++++ gcc/configure 2017-02-25 12:42:50.041946391 +0100
+@@ -7077,7 +7077,7 @@ else
+ fi
+
+ if test $enable_build_format_warnings = no; then :
+- wf_opt=-Wno-format
++ wf_opt="-Wno-format -Wno-format-security"
+ else
+ wf_opt=
+ fi
+--- Makefile.tpl.jj 2021-12-30 15:12:42.188164847 +0100
++++ Makefile.tpl 2022-01-07 12:06:12.115550714 +0100
+@@ -446,9 +446,9 @@ LDFLAGS = @LDFLAGS@
+ LIBCFLAGS = $(CFLAGS)
+ CXXFLAGS = @CXXFLAGS@
+ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
+-GOCFLAGS = $(CFLAGS)
+-GDCFLAGS = $(CFLAGS)
+-GM2FLAGS = $(CFLAGS)
++GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
++GDCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
++GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS))
+
+ # Pass additional PGO and LTO compiler options to the PGO build.
+ BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
+--- Makefile.in.jj 2021-12-30 15:12:42.188164847 +0100
++++ Makefile.in 2022-01-07 12:06:27.335334561 +0100
+@@ -443,9 +443,9 @@ LDFLAGS = @LDFLAGS@
+ LIBCFLAGS = $(CFLAGS)
+ CXXFLAGS = @CXXFLAGS@
+ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
+-GOCFLAGS = $(CFLAGS)
+-GDCFLAGS = $(CFLAGS)
+-GM2FLAGS = $(CFLAGS)
++GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
++GDCFLAGS = $(filter-out -Wformat-security,$(CFLAGS))
++GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS))
+
+ # Pass additional PGO and LTO compiler options to the PGO build.
+ BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS)
diff --git a/gcc13-d-shared-libphobos.patch b/gcc13-d-shared-libphobos.patch
new file mode 100644
index 0000000..6384bbb
--- /dev/null
+++ b/gcc13-d-shared-libphobos.patch
@@ -0,0 +1,20 @@
+2019-01-17 Jakub Jelinek
+
+ * d-spec.cc (lang_specific_driver): Make -shared-libphobos
+ the default rather than -static-libphobos.
+
+--- gcc/d/d-spec.cc.jj 2019-01-01 12:37:49.502444257 +0100
++++ gcc/d/d-spec.cc 2019-01-17 17:09:45.364949246 +0100
+@@ -408,9 +408,9 @@ lang_specific_driver (cl_decoded_option
+ /* Add `-lgphobos' if we haven't already done so. */
+ if (phobos_library != PHOBOS_NOLINK)
+ {
+- /* Default to static linking. */
+- if (phobos_library != PHOBOS_DYNAMIC)
+- phobos_library = PHOBOS_STATIC;
++ /* Default to shared linking. */
++ if (phobos_library != PHOBOS_STATIC)
++ phobos_library = PHOBOS_DYNAMIC;
+
+ #ifdef HAVE_LD_STATIC_DYNAMIC
+ if (phobos_library == PHOBOS_STATIC && !static_link)
diff --git a/gcc13-fortran-fdec-duplicates.patch b/gcc13-fortran-fdec-duplicates.patch
new file mode 100644
index 0000000..5298baa
--- /dev/null
+++ b/gcc13-fortran-fdec-duplicates.patch
@@ -0,0 +1,215 @@
+From 23b1fcb104c666429451ffaf936f8da5fcd3d43a Mon Sep 17 00:00:00 2001
+From: Mark Eggleston
+Date: Fri, 22 Jan 2021 12:29:47 +0000
+Subject: [PATCH 01/10] Allow duplicate declarations.
+
+Enabled by -fdec-duplicates and -fdec.
+
+Some fixes by Jim MacArthur
+Addition of -fdec-duplicates by Mark Eggleston
+---
+ gcc/fortran/lang.opt | 4 ++++
+ gcc/fortran/options.cc | 1 +
+ gcc/fortran/symbol.cc | 21 +++++++++++++++++--
+ .../gfortran.dg/duplicate_type_4.f90 | 13 ++++++++++++
+ .../gfortran.dg/duplicate_type_5.f90 | 13 ++++++++++++
+ .../gfortran.dg/duplicate_type_6.f90 | 13 ++++++++++++
+ .../gfortran.dg/duplicate_type_7.f90 | 13 ++++++++++++
+ .../gfortran.dg/duplicate_type_8.f90 | 12 +++++++++++
+ .../gfortran.dg/duplicate_type_9.f90 | 12 +++++++++++
+ 9 files changed, 100 insertions(+), 2 deletions(-)
+ create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_4.f90
+ create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_5.f90
+ create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_6.f90
+ create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_7.f90
+ create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_8.f90
+ create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_9.f90
+
+diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
+index 2b1977c523b..52bd522051e 100644
+--- a/gcc/fortran/lang.opt
++++ b/gcc/fortran/lang.opt
+@@ -469,6 +469,10 @@ Fortran Var(flag_dec_char_conversions)
+ Enable the use of character literals in assignments and data statements
+ for non-character variables.
+
++fdec-duplicates
++Fortran Var(flag_dec_duplicates)
++Allow varibles to be duplicated in the type specification matches.
++
+ fdec-include
+ Fortran Var(flag_dec_include)
+ Enable legacy parsing of INCLUDE as statement.
+diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc
+index 3a0b98bf1ec..f19ba87f8a0 100644
+--- a/gcc/fortran/options.cc
++++ b/gcc/fortran/options.cc
+@@ -77,6 +77,7 @@ set_dec_flags (int value)
+ SET_BITFLAG (flag_dec_format_defaults, value, value);
+ SET_BITFLAG (flag_dec_blank_format_item, value, value);
+ SET_BITFLAG (flag_dec_char_conversions, value, value);
++ SET_BITFLAG (flag_dec_duplicates, value, value);
+ }
+
+ /* Finalize DEC flags. */
+diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc
+index 3b988d1be22..9843175cc2a 100644
+--- a/gcc/fortran/symbol.cc
++++ b/gcc/fortran/symbol.cc
+@@ -1995,6 +1995,8 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
+ if (sym->attr.result && type == BT_UNKNOWN && sym->ns->proc_name)
+ type = sym->ns->proc_name->ts.type;
+
++ flavor = sym->attr.flavor;
++
+ if (type != BT_UNKNOWN && !(sym->attr.function && sym->attr.implicit_type)
+ && !(gfc_state_stack->previous && gfc_state_stack->previous->previous
+ && gfc_state_stack->previous->previous->state == COMP_SUBMODULE)
+@@ -2007,6 +2009,23 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
+ else if (sym->attr.function && sym->attr.result)
+ gfc_error ("Symbol %qs at %L already has basic type of %s",
+ sym->ns->proc_name->name, where, gfc_basic_typename (type));
++ else if (flag_dec_duplicates)
++ {
++ /* Ignore temporaries and class/procedure names */
++ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS
++ || sym->ts.type == BT_PROCEDURE)
++ return false;
++
++ if (gfc_compare_types (&sym->ts, ts)
++ && (flavor == FL_UNKNOWN || flavor == FL_VARIABLE
++ || flavor == FL_PROCEDURE))
++ {
++ return gfc_notify_std (GFC_STD_LEGACY,
++ "Symbol '%qs' at %L already has "
++ "basic type of %s", sym->name, where,
++ gfc_basic_typename (type));
++ }
++ }
+ else
+ gfc_error ("Symbol %qs at %L already has basic type of %s", sym->name,
+ where, gfc_basic_typename (type));
+@@ -2020,8 +2039,6 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where)
+ return false;
+ }
+
+- flavor = sym->attr.flavor;
+-
+ if (flavor == FL_PROGRAM || flavor == FL_BLOCK_DATA || flavor == FL_MODULE
+ || flavor == FL_LABEL
+ || (flavor == FL_PROCEDURE && sym->attr.subroutine)
+diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_4.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90
+new file mode 100644
+index 00000000000..cdd29ea8846
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++! { dg-options "-std=f95" }
++
++! PR fortran/30239
++! Check for errors when a symbol gets declared a type twice, even if it
++! is the same.
++
++INTEGER FUNCTION foo ()
++ IMPLICIT NONE
++ INTEGER :: x
++ INTEGER :: x ! { dg-error "basic type of" }
++ x = 42
++END FUNCTION foo
+diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_5.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_5.f90
+new file mode 100644
+index 00000000000..00f931809aa
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/duplicate_type_5.f90
+@@ -0,0 +1,13 @@
++! { dg-do run }
++! { dg-options "-fdec" }
++!
++! Test case contributed by Mark Eggleston
++!
++
++program test
++ implicit none
++ integer :: x
++ integer :: x
++ x = 42
++ if (x /= 42) stop 1
++end program test
+diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_6.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_6.f90
+new file mode 100644
+index 00000000000..f0df27e323c
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/duplicate_type_6.f90
+@@ -0,0 +1,13 @@
++! { dg-do run }
++! { dg-options "-std=legacy -fdec-duplicates" }
++!
++! Test case contributed by Mark Eggleston
++!
++
++program test
++ implicit none
++ integer :: x
++ integer :: x
++ x = 42
++ if (x /= 42) stop 1
++end program test
+diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_7.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_7.f90
+new file mode 100644
+index 00000000000..f32472ff586
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/duplicate_type_7.f90
+@@ -0,0 +1,13 @@
++! { dg-do run }
++! { dg-options "-fdec-duplicates" }
++!
++! Test case contributed by Mark Eggleston
++!
++
++program test
++ implicit none
++ integer :: x
++ integer :: x! { dg-warning "Legacy Extension" }
++ x = 42
++ if (x /= 42) stop 1
++end program test
+diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_8.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_8.f90
+new file mode 100644
+index 00000000000..23c94add179
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/duplicate_type_8.f90
+@@ -0,0 +1,12 @@
++! { dg-do compile }
++! { dg-options "-fdec -fno-dec-duplicates" }
++!
++! Test case contributed by Mark Eggleston
++!
++
++integer function foo ()
++ implicit none
++ integer :: x
++ integer :: x ! { dg-error "basic type of" }
++ x = 42
++end function foo
+diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_9.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_9.f90
+new file mode 100644
+index 00000000000..d5edee4d8ee
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/duplicate_type_9.f90
+@@ -0,0 +1,12 @@
++! { dg-do compile }
++! { dg-options "-fdec-duplicates -fno-dec-duplicates" }
++!
++! Test case contributed by Mark Eggleston
++!
++
++integer function foo ()
++ implicit none
++ integer :: x
++ integer :: x ! { dg-error "basic type of" }
++ x = 42
++end function foo
+--
+2.27.0
+
diff --git a/gcc13-fortran-fdec-non-logical-if.patch b/gcc13-fortran-fdec-non-logical-if.patch
new file mode 100644
index 0000000..a3a830c
--- /dev/null
+++ b/gcc13-fortran-fdec-non-logical-if.patch
@@ -0,0 +1,378 @@
+From cc87ddb841017bb0976b05091733609ee17d7f05 Mon Sep 17 00:00:00 2001
+From: Mark Eggleston
+Date: Fri, 22 Jan 2021 13:15:17 +0000
+Subject: [PATCH 07/10] Allow non-logical expressions in IF statements
+
+Use -fdec-non-logical-if to enable feature. Also enabled using -fdec.
+---
+ gcc/fortran/lang.opt | 4 ++
+ gcc/fortran/options.cc | 1 +
+ gcc/fortran/resolve.cc | 60 ++++++++++++++++---
+ ...gical_expressions_if_statements_blocks_1.f | 25 ++++++++
+ ...gical_expressions_if_statements_blocks_2.f | 25 ++++++++
+ ...gical_expressions_if_statements_blocks_3.f | 25 ++++++++
+ ...gical_expressions_if_statements_blocks_4.f | 45 ++++++++++++++
+ ...gical_expressions_if_statements_blocks_5.f | 45 ++++++++++++++
+ ...gical_expressions_if_statements_blocks_6.f | 45 ++++++++++++++
+ 9 files changed, 266 insertions(+), 9 deletions(-)
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
+
+diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
+index 4a269ebb22d..d886c2f33ed 100644
+--- a/gcc/fortran/lang.opt
++++ b/gcc/fortran/lang.opt
+@@ -506,6 +506,10 @@ fdec-override-kind
+ Fortran Var(flag_dec_override_kind)
+ Enable support for per variable kind specification.
+
++fdec-non-logical-if
++Fortran Var(flag_dec_non_logical_if)
++Enable support for non-logical expressions in if statements.
++
+ fdec-structure
+ Fortran Var(flag_dec_structure)
+ Enable support for DEC STRUCTURE/RECORD.
+diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc
+index edbab483b36..a946c86790a 100644
+--- a/gcc/fortran/options.cc
++++ b/gcc/fortran/options.cc
+@@ -79,6 +79,7 @@ set_dec_flags (int value)
+ SET_BITFLAG (flag_dec_char_conversions, value, value);
+ SET_BITFLAG (flag_dec_duplicates, value, value);
+ SET_BITFLAG (flag_dec_override_kind, value, value);
++ SET_BITFLAG (flag_dec_non_logical_if, value, value);
+ }
+
+ /* Finalize DEC flags. */
+diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
+index bc0df0fdb99..07dd039f3bf 100644
+--- a/gcc/fortran/resolve.cc
++++ b/gcc/fortran/resolve.cc
+@@ -10789,10 +10789,31 @@ gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
+ switch (b->op)
+ {
+ case EXEC_IF:
+- if (t && b->expr1 != NULL
+- && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
+- gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
+- &b->expr1->where);
++ if (t && b->expr1 != NULL)
++ {
++ if (flag_dec_non_logical_if && b->expr1->ts.type != BT_LOGICAL)
++ {
++ gfc_expr* cast;
++ cast = gfc_ne (b->expr1,
++ gfc_get_int_expr (1, &gfc_current_locus, 0),
++ INTRINSIC_NE);
++ if (cast == NULL)
++ gfc_internal_error ("gfc_resolve_blocks(): Failed to cast "
++ "to LOGICAL in IF");
++ b->expr1 = cast;
++ if (warn_conversion_extra)
++ {
++ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in"
++ " IF statement condition %L will be true if"
++ " it evaluates to nonzero",
++ &b->expr1->where);
++ }
++ }
++
++ if ((b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0))
++ gfc_error ("IF clause at %L requires a scalar LOGICAL "
++ "expression", &b->expr1->where);
++ }
+ break;
+
+ case EXEC_WHERE:
+@@ -12093,11 +12114,32 @@ start:
+ break;
+
+ case EXEC_IF:
+- if (t && code->expr1 != NULL
+- && (code->expr1->ts.type != BT_LOGICAL
+- || code->expr1->rank != 0))
+- gfc_error ("IF clause at %L requires a scalar LOGICAL expression",
+- &code->expr1->where);
++ if (t && code->expr1 != NULL)
++ {
++ if (flag_dec_non_logical_if
++ && code->expr1->ts.type != BT_LOGICAL)
++ {
++ gfc_expr* cast;
++ cast = gfc_ne (code->expr1,
++ gfc_get_int_expr (1, &gfc_current_locus, 0),
++ INTRINSIC_NE);
++ if (cast == NULL)
++ gfc_internal_error ("gfc_resolve_code(): Failed to cast "
++ "to LOGICAL in IF");
++ code->expr1 = cast;
++ if (warn_conversion_extra)
++ {
++ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in"
++ " IF statement condition %L will be true if"
++ " it evaluates to nonzero",
++ &code->expr1->where);
++ }
++ }
++
++ if (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank != 0)
++ gfc_error ("IF clause at %L requires a scalar LOGICAL "
++ "expression", &code->expr1->where);
++ }
+ break;
+
+ case EXEC_CALL:
+diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
+new file mode 100644
+index 00000000000..0101db893ca
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f
+@@ -0,0 +1,25 @@
++! { dg-do run }
++! { dg-options "-fdec -Wconversion-extra" }
++!
++! Allow logical expressions in if statements and blocks
++!
++! Contributed by Francisco Redondo Marchena
++! and Jeff Law
++! Modified by Mark Eggleston
++!
++ PROGRAM logical_exp_if_st_bl
++ INTEGER ipos/1/
++ INTEGER ineg/0/
++
++ ! Test non logical variables
++ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" }
++ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" }
++
++ ! Test non logical expressions in if statements
++ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" }
++
++ ! Test non logical expressions in if blocks
++ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" }
++ STOP 4
++ endif
++ END
+diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
+new file mode 100644
+index 00000000000..876f4e09508
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f
+@@ -0,0 +1,25 @@
++! { dg-do run }
++! { dg-options "-fdec-non-logical-if -Wconversion-extra" }
++!
++! Allow logical expressions in if statements and blocks
++!
++! Contributed by Francisco Redondo Marchena
++! and Jeff Law
++! Modified by Mark Eggleston
++!
++ PROGRAM logical_exp_if_st_bl
++ INTEGER ipos/1/
++ INTEGER ineg/0/
++
++ ! Test non logical variables
++ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" }
++ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" }
++
++ ! Test non logical expressions in if statements
++ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" }
++
++ ! Test non logical expressions in if blocks
++ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" }
++ STOP 4
++ endif
++ END
+diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
+new file mode 100644
+index 00000000000..35cb4c51b8d
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f
+@@ -0,0 +1,25 @@
++! { dg-do compile }
++! { dg-options "-fdec -fno-dec-non-logical-if" }
++!
++! Allow logical expressions in if statements and blocks
++!
++! Contributed by Francisco Redondo Marchena
++! and Jeff Law
++! Modified by Mark Eggleston
++!
++ PROGRAM logical_exp_if_st_bl
++ INTEGER ipos/1/
++ INTEGER ineg/0/
++
++ ! Test non logical variables
++ if (ineg) STOP 1 ! { dg-error "IF clause at" }
++ if (0) STOP 2 ! { dg-error "IF clause at" }
++
++ ! Test non logical expressions in if statements
++ if (MOD(ipos, 1)) STOP 3 ! { dg-error "IF clause at" }
++
++ ! Test non logical expressions in if blocks
++ if (MOD(2 * ipos, 2)) then ! { dg-error "IF clause at" }
++ STOP 4
++ endif
++ END
+diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
+new file mode 100644
+index 00000000000..7b60b60827f
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f
+@@ -0,0 +1,45 @@
++! { dg-do run }
++! { dg-options "-fdec -Wconversion-extra" }
++!
++! Contributed by Francisco Redondo Marchena
++! and Jeff Law
++! Modified by Mark Eggleston
++!
++ function othersub1()
++ integer*4 othersub1
++ othersub1 = 9
++ end
++
++ function othersub2()
++ integer*4 othersub2
++ othersub2 = 0
++ end
++
++ program MAIN
++ integer*4 othersub1
++ integer*4 othersub2
++ integer a /1/
++ integer b /2/
++
++ if (othersub1()) then ! { dg-warning "if it evaluates to nonzero" }
++ write(*,*) "OK"
++ else
++ stop 1
++ end if
++ if (othersub2()) then ! { dg-warning "if it evaluates to nonzero" }
++ stop 2
++ else
++ write(*,*) "OK"
++ end if
++ if (a-b) then ! { dg-warning "if it evaluates to nonzero" }
++ write(*,*) "OK"
++ else
++ stop 3
++ end if
++ if (b-(a+1)) then ! { dg-warning "if it evaluates to nonzero" }
++ stop 3
++ else
++ write(*,*) "OK"
++ end if
++ end
++
+diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
+new file mode 100644
+index 00000000000..80336f48ca1
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f
+@@ -0,0 +1,45 @@
++! { dg-do run }
++! { dg-options "-fdec-non-logical-if -Wconversion-extra" }
++!
++! Contributed by Francisco Redondo Marchena
++! and Jeff Law
++! Modified by Mark Eggleston
++!
++ function othersub1()
++ integer*4 othersub1
++ othersub1 = 9
++ end
++
++ function othersub2()
++ integer*4 othersub2
++ othersub2 = 0
++ end
++
++ program MAIN
++ integer*4 othersub1
++ integer*4 othersub2
++ integer a /1/
++ integer b /2/
++
++ if (othersub1()) then ! { dg-warning "Non-LOGICAL type in IF statement" }
++ write(*,*) "OK"
++ else
++ stop 1
++ end if
++ if (othersub2()) then ! { dg-warning "Non-LOGICAL type in IF statement" }
++ stop 2
++ else
++ write(*,*) "OK"
++ end if
++ if (a-b) then ! { dg-warning "Non-LOGICAL type in IF statement" }
++ write(*,*) "OK"
++ else
++ stop 3
++ end if
++ if (b-(a+1)) then ! { dg-warning "Non-LOGICAL type in IF statement" }
++ stop 3
++ else
++ write(*,*) "OK"
++ end if
++ end
++
+diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
+new file mode 100644
+index 00000000000..e1125ca717a
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f
+@@ -0,0 +1,45 @@
++! { dg-do compile }
++! { dg-options "-fdec -fno-dec-non-logical-if" }
++!
++! Contributed by Francisco Redondo Marchena
++! and Jeff Law
++! Modified by Mark Eggleston
++!
++ function othersub1()
++ integer*4 othersub1
++ othersub1 = 9
++ end
++
++ function othersub2()
++ integer*4 othersub2
++ othersub2 = 0
++ end
++
++ program MAIN
++ integer*4 othersub1
++ integer*4 othersub2
++ integer a /1/
++ integer b /2/
++
++ if (othersub1()) then ! { dg-error "IF clause at" }
++ write(*,*) "OK"
++ else
++ stop 1
++ end if
++ if (othersub2()) then ! { dg-error "IF clause at" }
++ stop 2
++ else
++ write(*,*) "OK"
++ end if
++ if (a-b) then ! { dg-error "IF clause at" }
++ write(*,*) "OK"
++ else
++ stop 3
++ end if
++ if (b-(a+1)) then ! { dg-error "IF clause at" }
++ stop 3
++ else
++ write(*,*) "OK"
++ end if
++ end
++
+--
+2.27.0
+
diff --git a/gcc13-fortran-fdec-override-kind.patch b/gcc13-fortran-fdec-override-kind.patch
new file mode 100644
index 0000000..370fa56
--- /dev/null
+++ b/gcc13-fortran-fdec-override-kind.patch
@@ -0,0 +1,588 @@
+From 786869fd62813e80da9b6545a295d53c36275c19 Mon Sep 17 00:00:00 2001
+From: Mark Eggleston
+Date: Fri, 22 Jan 2021 13:12:14 +0000
+Subject: [PATCH 06/10] Allow string length and kind to be specified on a per
+ variable basis.
+
+This allows kind/length to be mixed with array specification in
+declarations.
+
+e.g.
+
+ INTEGER*4 x*2, y*8
+ CHARACTER names*20(10)
+ REAL v(100)*8, vv*4(50)
+
+The per-variable size overrides the kind or length specified for the type.
+
+Use -fdec-override-kind to enable. Also enabled by -fdec.
+
+Note: this feature is a merger of two previously separate features.
+
+Now accepts named constants as kind parameters:
+
+ INTEGER A
+ PARAMETER (A=2)
+ INTEGER B*(A)
+
+Contributed by Mark Eggleston
+
+Now rejects invalid kind parameters and prints error messages:
+
+ INTEGER X*3
+
+caused an internal compiler error.
+
+Contributed by Mark Eggleston
+---
+ gcc/fortran/decl.cc | 156 ++++++++++++++----
+ gcc/fortran/lang.opt | 4 +
+ gcc/fortran/options.cc | 1 +
+ .../dec_mixed_char_array_declaration_1.f | 13 ++
+ .../dec_mixed_char_array_declaration_2.f | 13 ++
+ .../dec_mixed_char_array_declaration_3.f | 13 ++
+ .../gfortran.dg/dec_spec_in_variable_1.f | 31 ++++
+ .../gfortran.dg/dec_spec_in_variable_2.f | 31 ++++
+ .../gfortran.dg/dec_spec_in_variable_3.f | 31 ++++
+ .../gfortran.dg/dec_spec_in_variable_4.f | 14 ++
+ .../gfortran.dg/dec_spec_in_variable_5.f | 19 +++
+ .../gfortran.dg/dec_spec_in_variable_6.f | 19 +++
+ .../gfortran.dg/dec_spec_in_variable_7.f | 15 ++
+ .../gfortran.dg/dec_spec_in_variable_8.f | 14 ++
+ 14 files changed, 340 insertions(+), 34 deletions(-)
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
+ create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
+
+diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
+index 5c8c1b7981b..f7dc9d8263d 100644
+--- a/gcc/fortran/decl.cc
++++ b/gcc/fortran/decl.cc
+@@ -1213,6 +1213,54 @@ syntax:
+ return MATCH_ERROR;
+ }
+
++/* This matches the nonstandard kind given after a variable name, like:
++ INTEGER x*2, y*4
++ The per-variable kind will override any kind given in the type
++ declaration.
++*/
++
++static match
++match_per_symbol_kind (int *length)
++{
++ match m;
++ gfc_expr *expr = NULL;
++
++ m = gfc_match_char ('*');
++ if (m != MATCH_YES)
++ return m;
++
++ m = gfc_match_small_literal_int (length, NULL);
++ if (m == MATCH_YES || m == MATCH_ERROR)
++ return m;
++
++ if (gfc_match_char ('(') == MATCH_NO)
++ return MATCH_ERROR;
++
++ m = gfc_match_expr (&expr);
++ if (m == MATCH_YES)
++ {
++ m = MATCH_ERROR; // Assume error
++ if (gfc_expr_check_typed (expr, gfc_current_ns, false))
++ {
++ if ((expr->expr_type == EXPR_CONSTANT)
++ && (expr->ts.type == BT_INTEGER))
++ {
++ *length = mpz_get_si(expr->value.integer);
++ m = MATCH_YES;
++ }
++ }
++
++ if (m == MATCH_YES)
++ {
++ if (gfc_match_char (')') == MATCH_NO)
++ m = MATCH_ERROR;
++ }
++ }
++
++ if (expr != NULL)
++ gfc_free_expr (expr);
++ return m;
++}
+
+ /* Special subroutine for finding a symbol. Check if the name is found
+ in the current name space. If not, and we're compiling a function or
+@@ -2443,6 +2491,35 @@ check_function_name (char *name)
+ }
+
+
++static match
++match_character_length_clause (gfc_charlen **cl, bool *cl_deferred, int elem)
++{
++ gfc_expr* char_len;
++ char_len = NULL;
++
++ match m = match_char_length (&char_len, cl_deferred, false);
++ if (m == MATCH_YES)
++ {
++ *cl = gfc_new_charlen (gfc_current_ns, NULL);
++ (*cl)->length = char_len;
++ }
++ else if (m == MATCH_NO)
++ {
++ if (elem > 1
++ && (current_ts.u.cl->length == NULL
++ || current_ts.u.cl->length->expr_type != EXPR_CONSTANT))
++ {
++ *cl = gfc_new_charlen (gfc_current_ns, NULL);
++ (*cl)->length = gfc_copy_expr (current_ts.u.cl->length);
++ }
++ else
++ *cl = current_ts.u.cl;
++
++ *cl_deferred = current_ts.deferred;
++ }
++ return m;
++}
++
+ /* Match a variable name with an optional initializer. When this
+ subroutine is called, a variable is expected to be parsed next.
+ Depending on what is happening at the moment, updates either the
+@@ -2453,7 +2530,7 @@ variable_decl (int elem)
+ {
+ char name[GFC_MAX_SYMBOL_LEN + 1];
+ static unsigned int fill_id = 0;
+- gfc_expr *initializer, *char_len;
++ gfc_expr *initializer;
+ gfc_array_spec *as;
+ gfc_array_spec *cp_as; /* Extra copy for Cray Pointees. */
+ gfc_charlen *cl;
+@@ -2462,11 +2539,15 @@ variable_decl (int elem)
+ match m;
+ bool t;
+ gfc_symbol *sym;
++ match cl_match;
++ match kind_match;
++ int overridden_kind;
+ char c;
+
+ initializer = NULL;
+ as = NULL;
+ cp_as = NULL;
++ kind_match = MATCH_NO;
+
+ /* When we get here, we've just matched a list of attributes and
+ maybe a type and a double colon. The next thing we expect to see
+@@ -2519,6 +2600,28 @@ variable_decl (int elem)
+
+ var_locus = gfc_current_locus;
+
++
++ cl = NULL;
++ cl_deferred = false;
++ cl_match = MATCH_NO;
++
++ /* Check for a character length clause before an array clause */
++ if (flag_dec_override_kind)
++ {
++ if (current_ts.type == BT_CHARACTER)
++ {
++ cl_match = match_character_length_clause (&cl, &cl_deferred, elem);
++ if (cl_match == MATCH_ERROR)
++ goto cleanup;
++ }
++ else
++ {
++ kind_match = match_per_symbol_kind (&overridden_kind);
++ if (kind_match == MATCH_ERROR)
++ goto cleanup;
++ }
++ }
++
+ /* Now we could see the optional array spec. or character length. */
+ m = gfc_match_array_spec (&as, true, true);
+ if (m == MATCH_ERROR)
+@@ -2667,40 +2770,12 @@ variable_decl (int elem)
+ }
+ }
+
+- char_len = NULL;
+- cl = NULL;
+- cl_deferred = false;
+-
+- if (current_ts.type == BT_CHARACTER)
++ /* Second chance for a character length clause */
++ if (cl_match == MATCH_NO && current_ts.type == BT_CHARACTER)
+ {
+- switch (match_char_length (&char_len, &cl_deferred, false))
+- {
+- case MATCH_YES:
+- cl = gfc_new_charlen (gfc_current_ns, NULL);
+-
+- cl->length = char_len;
+- break;
+-
+- /* Non-constant lengths need to be copied after the first
+- element. Also copy assumed lengths. */
+- case MATCH_NO:
+- if (elem > 1
+- && (current_ts.u.cl->length == NULL
+- || current_ts.u.cl->length->expr_type != EXPR_CONSTANT))
+- {
+- cl = gfc_new_charlen (gfc_current_ns, NULL);
+- cl->length = gfc_copy_expr (current_ts.u.cl->length);
+- }
+- else
+- cl = current_ts.u.cl;
+-
+- cl_deferred = current_ts.deferred;
+-
+- break;
+-
+- case MATCH_ERROR:
+- goto cleanup;
+- }
++ m = match_character_length_clause (&cl, &cl_deferred, elem);
++ if (m == MATCH_ERROR)
++ goto cleanup;
+ }
+
+ /* The dummy arguments and result of the abreviated form of MODULE
+@@ -2802,6 +2877,19 @@ variable_decl (int elem)
+ goto cleanup;
+ }
+
++ if (kind_match == MATCH_YES)
++ {
++ gfc_find_symbol (name, gfc_current_ns, 1, &sym);
++ /* sym *must* be found at this point */
++ sym->ts.kind = overridden_kind;
++ if (gfc_validate_kind (sym->ts.type, sym->ts.kind, true) < 0)
++ {
++ gfc_error ("Kind %d not supported for type %s at %C",
++ sym->ts.kind, gfc_basic_typename (sym->ts.type));
++ return MATCH_ERROR;
++ }
++ }
++
+ if (!check_function_name (name))
+ {
+ m = MATCH_ERROR;
+diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
+index 25cc948699b..4a269ebb22d 100644
+--- a/gcc/fortran/lang.opt
++++ b/gcc/fortran/lang.opt
+@@ -502,6 +502,10 @@ fdec-math
+ Fortran Var(flag_dec_math)
+ Enable legacy math intrinsics for compatibility.
+
++fdec-override-kind
++Fortran Var(flag_dec_override_kind)
++Enable support for per variable kind specification.
++
+ fdec-structure
+ Fortran Var(flag_dec_structure)
+ Enable support for DEC STRUCTURE/RECORD.
+diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc
+index d6bd36c3a8a..edbab483b36 100644
+--- a/gcc/fortran/options.cc
++++ b/gcc/fortran/options.cc
+@@ -78,6 +78,7 @@ set_dec_flags (int value)
+ SET_BITFLAG (flag_dec_blank_format_item, value, value);
+ SET_BITFLAG (flag_dec_char_conversions, value, value);
+ SET_BITFLAG (flag_dec_duplicates, value, value);
++ SET_BITFLAG (flag_dec_override_kind, value, value);
+ }
+
+ /* Finalize DEC flags. */
+diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
+new file mode 100644
+index 00000000000..706ea4112a4
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f
+@@ -0,0 +1,13 @@
++! { dg-do run }
++! { dg-options "-fdec" }
++!
++! Test character declaration with mixed string length and array specification
++!
++! Contributed by Jim MacArthur
++! Modified by Mark Eggleston
++!
++ PROGRAM character_declaration
++ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/
++ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
++ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1
++ END
+diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
+new file mode 100644
+index 00000000000..26d2acf01de
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f
+@@ -0,0 +1,13 @@
++! { dg-do run }
++! { dg-options "-fdec-override-kind" }
++!
++! Test character declaration with mixed string length and array specification
++!
++! Contributed by Jim MacArthur
++! Modified by Mark Eggleston
++!
++ PROGRAM character_declaration
++ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/
++ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
++ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1
++ END
+diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
+new file mode 100644
+index 00000000000..76e4f0bdb93
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++! { dg-options "-fdec-override-kind -fno-dec-override-kind" }
++!
++! Test character declaration with mixed string length and array specification
++!
++! Contributed by Jim MacArthur
++! Modified by Mark Eggleston
++!
++ PROGRAM character_declaration
++ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ ! { dg-error "Syntax error" }
++ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/
++ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 ! { dg-error " Operands of comparison operator" }
++ END
+diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
+new file mode 100644
+index 00000000000..edd0f5874b7
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f
+@@ -0,0 +1,31 @@
++! { dg-do run }
++! { dg-options "-fdec" }
++!
++! Test kind specification in variable not in type
++!
++! Contributed by Mark Eggleston
++!
++ program spec_in_var
++ integer*8 ai*1, bi*4, ci
++ real*4 ar*4, br*8, cr
++
++ ai = 1
++ ar = 1.0
++ bi = 2
++ br = 2.0
++ ci = 3
++ cr = 3.0
++
++ if (ai .ne. 1) stop 1
++ if (abs(ar - 1.0) > 1.0D-6) stop 2
++ if (bi .ne. 2) stop 3
++ if (abs(br - 2.0) > 1.0D-6) stop 4
++ if (ci .ne. 3) stop 5
++ if (abs(cr - 3.0) > 1.0D-6) stop 6
++ if (kind(ai) .ne. 1) stop 7
++ if (kind(ar) .ne. 4) stop 8
++ if (kind(bi) .ne. 4) stop 9
++ if (kind(br) .ne. 8) stop 10
++ if (kind(ci) .ne. 8) stop 11
++ if (kind(cr) .ne. 4) stop 12
++ end
+diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
+new file mode 100644
+index 00000000000..bfaba584dbb
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f
+@@ -0,0 +1,31 @@
++! { dg-do run }
++! { dg-options "-fdec-override-kind" }
++!
++! Test kind specification in variable not in type
++!
++! Contributed by Mark Eggleston
++!
++ program spec_in_var
++ integer*8 ai*1, bi*4, ci
++ real*4 ar*4, br*8, cr
++
++ ai = 1
++ ar = 1.0
++ bi = 2
++ br = 2.0
++ ci = 3
++ cr = 3.0
++
++ if (ai .ne. 1) stop 1
++ if (abs(ar - 1.0) > 1.0D-6) stop 2
++ if (bi .ne. 2) stop 3
++ if (abs(br - 2.0) > 1.0D-6) stop 4
++ if (ci .ne. 3) stop 5
++ if (abs(cr - 3.0) > 1.0D-6) stop 6
++ if (kind(ai) .ne. 1) stop 7
++ if (kind(ar) .ne. 4) stop 8
++ if (kind(bi) .ne. 4) stop 9
++ if (kind(br) .ne. 8) stop 10
++ if (kind(ci) .ne. 8) stop 11
++ if (kind(cr) .ne. 4) stop 12
++ end
+diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
+new file mode 100644
+index 00000000000..5ff434e7466
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f
+@@ -0,0 +1,31 @@
++! { dg-do compile }
++! { dg-options "-fdec -fno-dec-override-kind" }
++!
++! Test kind specification in variable not in type
++!
++! Contributed by Mark Eggleston
++!
++ program spec_in_var
++ integer*8 ai*1, bi*4, ci ! { dg-error "Syntax error" }
++ real*4 ar*4, br*8, cr ! { dg-error "Syntax error" }
++
++ ai = 1
++ ar = 1.0
++ bi = 2
++ br = 2.0
++ ci = 3
++ cr = 3.0
++
++ if (ai .ne. 1) stop 1
++ if (abs(ar - 1.0) > 1.0D-6) stop 2
++ if (bi .ne. 2) stop 3
++ if (abs(br - 2.0) > 1.0D-6) stop 4
++ if (ci .ne. 3) stop 5
++ if (abs(cr - 3.0) > 1.0D-6) stop 6
++ if (kind(ai) .ne. 1) stop 7
++ if (kind(ar) .ne. 4) stop 8
++ if (kind(bi) .ne. 4) stop 9
++ if (kind(br) .ne. 8) stop 10
++ if (kind(ci) .ne. 8) stop 11
++ if (kind(cr) .ne. 4) stop 12
++ end
+diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
+new file mode 100644
+index 00000000000..c01980e8b9d
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f
+@@ -0,0 +1,14 @@
++! { dg-do compile }
++!
++! Test kind specification in variable not in type. The per variable
++! kind specification is not enabled so these should fail
++!
++! Contributed by Mark Eggleston
++!
++ program spec_in_var
++ integer a
++ parameter(a=2)
++ integer b*(a) ! { dg-error "Syntax error" }
++ real c*(8) ! { dg-error "Syntax error" }
++ logical d*1_1 ! { dg-error "Syntax error" }
++ end
+diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
+new file mode 100644
+index 00000000000..e2f39da3f4f
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f
+@@ -0,0 +1,19 @@
++! { dg-do run }
++! { dg-options "-fdec-override-kind" }
++!
++! Test kind specification in variable not in type
++!
++! Contributed by Mark Eggleston
++!
++ program spec_in_var
++ integer a
++ parameter(a=2)
++ integer b*(a)
++ real c*(8)
++ logical d*(1_1)
++ character e*(a)
++ if (kind(b).ne.2) stop 1
++ if (kind(c).ne.8) stop 2
++ if (kind(d).ne.1) stop 3
++ if (len(e).ne.2) stop 4
++ end
+diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
+new file mode 100644
+index 00000000000..569747874e3
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f
+@@ -0,0 +1,19 @@
++! { dg-do run }
++! { dg-options "-fdec" }
++!
++! Test kind specification in variable not in type
++!
++! Contributed by Mark Eggleston
++!
++ program spec_in_var
++ integer a
++ parameter(a=2)
++ integer b*(a)
++ real c*(8)
++ logical d*(1_1)
++ character e*(a)
++ if (kind(b).ne.2) stop 1
++ if (kind(c).ne.8) stop 2
++ if (kind(d).ne.1) stop 3
++ if (len(e).ne.2) stop 4
++ end
+diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
+new file mode 100644
+index 00000000000..b975bfd15c5
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f
+@@ -0,0 +1,15 @@
++! { dg-do compile }
++! { dg-options "-fdec -fno-dec-override-kind" }
++!
++! Test kind specification in variable not in type as the per variable
++! kind specification is not enables these should fail
++!
++! Contributed by Mark Eggleston
++!
++ program spec_in_var
++ integer a
++ parameter(a=2)
++ integer b*(a) ! { dg-error "Syntax error" }
++ real c*(8) ! { dg-error "Syntax error" }
++ logical d*1_1 ! { dg-error "Syntax error" }
++ end
+diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
+new file mode 100644
+index 00000000000..85732e0bd85
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f
+@@ -0,0 +1,14 @@
++! { dg-do compile }
++! { dg-options "-fdec" }
++!
++! Check that invalid kind values are rejected.
++!
++! Contributed by Mark Eggleston
++!
++ program spec_in_var
++ integer a
++ parameter(a=3)
++ integer b*(a) ! { dg-error "Kind 3 not supported" }
++ real c*(78) ! { dg-error "Kind 78 not supported" }
++ logical d*(*) ! { dg-error "Invalid character" }
++ end
+--
+2.27.0
+
diff --git a/gcc13-fortran-flogical-as-integer.patch b/gcc13-fortran-flogical-as-integer.patch
new file mode 100644
index 0000000..28df5e1
--- /dev/null
+++ b/gcc13-fortran-flogical-as-integer.patch
@@ -0,0 +1,305 @@
+From 9b45f3063dfd2b893e7963a4828c1b0afecdc68a Mon Sep 17 00:00:00 2001
+From: Mark Eggleston
+Date: Fri, 22 Jan 2021 12:41:46 +0000
+Subject: [PATCH 02/10] Convert LOGICAL to INTEGER for arithmetic ops, and vice
+ versa
+
+We allow converting LOGICAL types to INTEGER when doing arithmetic
+operations, and converting INTEGER types to LOGICAL for use in
+boolean operations.
+
+This feature is enabled with the -flogical-as-integer flag.
+
+Note: using this feature will disable bitwise logical operations enabled by
+-fdec.
+---
+ gcc/fortran/lang.opt | 4 ++
+ gcc/fortran/resolve.cc | 55 ++++++++++++++++++-
+ .../logical_to_integer_and_vice_versa_1.f | 31 +++++++++++
+ .../logical_to_integer_and_vice_versa_2.f | 31 +++++++++++
+ .../logical_to_integer_and_vice_versa_3.f | 33 +++++++++++
+ .../logical_to_integer_and_vice_versa_4.f | 33 +++++++++++
+ 6 files changed, 186 insertions(+), 1 deletion(-)
+ create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
+ create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
+ create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
+ create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
+
+diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
+index 52bd522051e..c4da248f07c 100644
+--- a/gcc/fortran/lang.opt
++++ b/gcc/fortran/lang.opt
+@@ -497,6 +497,10 @@ fdec-static
+ Fortran Var(flag_dec_static)
+ Enable DEC-style STATIC and AUTOMATIC attributes.
+
++flogical-as-integer
++Fortran Var(flag_logical_as_integer)
++Convert from integer to logical or logical to integer for arithmetic operations.
++
+ fdefault-double-8
+ Fortran Var(flag_default_double)
+ Set the default double precision kind to an 8 byte wide type.
+diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
+index c075d0fa0c4..4b90cb59902 100644
+--- a/gcc/fortran/resolve.cc
++++ b/gcc/fortran/resolve.cc
+@@ -3915,7 +3915,6 @@ lookup_uop_fuzzy (const char *op, gfc_symtree *uop)
+ return gfc_closest_fuzzy_match (op, candidates);
+ }
+
+-
+ /* Callback finding an impure function as an operand to an .and. or
+ .or. expression. Remember the last function warned about to
+ avoid double warnings when recursing. */
+@@ -3975,6 +3974,22 @@ convert_hollerith_to_character (gfc_expr *e)
+ }
+ }
+
++/* If E is a logical, convert it to an integer and issue a warning
++ for the conversion. */
++
++static void
++convert_integer_to_logical (gfc_expr *e)
++{
++ if (e->ts.type == BT_INTEGER)
++ {
++ /* Convert to LOGICAL */
++ gfc_typespec t;
++ t.type = BT_LOGICAL;
++ t.kind = 1;
++ gfc_convert_type_warn (e, &t, 2, 1);
++ }
++}
++
+ /* Convert to numeric and issue a warning for the conversion. */
+
+ static void
+@@ -3987,6 +4002,22 @@ convert_to_numeric (gfc_expr *a, gfc_expr *b)
+ gfc_convert_type_warn (a, &t, 2, 1);
+ }
+
++/* If E is a logical, convert it to an integer and issue a warning
++ for the conversion. */
++
++static void
++convert_logical_to_integer (gfc_expr *e)
++{
++ if (e->ts.type == BT_LOGICAL)
++ {
++ /* Convert to INTEGER */
++ gfc_typespec t;
++ t.type = BT_INTEGER;
++ t.kind = 1;
++ gfc_convert_type_warn (e, &t, 2, 1);
++ }
++}
++
+ /* Resolve an operator expression node. This can involve replacing the
+ operation with a user defined function call. */
+
+@@ -4072,6 +4103,12 @@ resolve_operator (gfc_expr *e)
+ case INTRINSIC_TIMES:
+ case INTRINSIC_DIVIDE:
+ case INTRINSIC_POWER:
++ if (flag_logical_as_integer)
++ {
++ convert_logical_to_integer (op1);
++ convert_logical_to_integer (op2);
++ }
++
+ if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts))
+ {
+ gfc_type_convert_binary (e, 1);
+@@ -4108,6 +4145,13 @@ resolve_operator (gfc_expr *e)
+ case INTRINSIC_OR:
+ case INTRINSIC_EQV:
+ case INTRINSIC_NEQV:
++
++ if (flag_logical_as_integer)
++ {
++ convert_integer_to_logical (op1);
++ convert_integer_to_logical (op2);
++ }
++
+ if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL)
+ {
+ e->ts.type = BT_LOGICAL;
+@@ -4158,6 +4202,9 @@ resolve_operator (gfc_expr *e)
+ goto simplify_op;
+ }
+
++ if (flag_logical_as_integer)
++ convert_integer_to_logical (op1);
++
+ if (op1->ts.type == BT_LOGICAL)
+ {
+ e->ts.type = BT_LOGICAL;
+@@ -4198,6 +4245,12 @@ resolve_operator (gfc_expr *e)
+ convert_hollerith_to_character (op2);
+ }
+
++ if (flag_logical_as_integer)
++ {
++ convert_logical_to_integer (op1);
++ convert_logical_to_integer (op2);
++ }
++
+ if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
+ && op1->ts.kind == op2->ts.kind)
+ {
+diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
+new file mode 100644
+index 00000000000..938a91d9e9a
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f
+@@ -0,0 +1,31 @@
++! { dg-do run }
++! { dg-options "-std=legacy -flogical-as-integer" }
++!
++! Test conversion between logical and integer for logical operators
++!
++! Test case contributed by Jim MacArthur
++! Modified for -flogical-as-integer by Mark Eggleston
++!
++!
++ PROGRAM logical_integer_conversion
++ LOGICAL lpos /.true./
++ INTEGER ineg/0/
++ INTEGER ires
++ LOGICAL lres
++
++ ! Test Logicals converted to Integers
++ if ((lpos.AND.ineg).EQ.1) STOP 3
++ if ((ineg.AND.lpos).NE.0) STOP 4
++ ires = (.true..AND.0)
++ if (ires.NE.0) STOP 5
++ ires = (1.AND..false.)
++ if (ires.EQ.1) STOP 6
++
++ ! Test Integers converted to Logicals
++ if (lpos.EQ.ineg) STOP 7
++ if (ineg.EQ.lpos) STOP 8
++ lres = (.true..EQ.0)
++ if (lres) STOP 9
++ lres = (1.EQ..false.)
++ if (lres) STOP 10
++ END
+diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
+new file mode 100644
+index 00000000000..9f146202ba5
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f
+@@ -0,0 +1,31 @@
++! { dg-do compile }
++! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" }
++!
++! Based on logical_to_integer_and_vice_versa_1.f but with option disabled
++! to test for error messages.
++!
++! Test case contributed by by Mark Eggleston
++!
++!
++ PROGRAM logical_integer_conversion
++ LOGICAL lpos /.true./
++ INTEGER ineg/0/
++ INTEGER ires
++ LOGICAL lres
++
++ ! Test Logicals converted to Integers
++ if ((lpos.AND.ineg).EQ.1) STOP 3 ! { dg-error "Operands of logical operator" }
++ if ((ineg.AND.lpos).NE.0) STOP 4 ! { dg-error "Operands of logical operator" }
++ ires = (.true..AND.0) ! { dg-error "Operands of logical operator" }
++ if (ires.NE.0) STOP 5
++ ires = (1.AND..false.) ! { dg-error "Operands of logical operator" }
++ if (ires.EQ.1) STOP 6
++
++ ! Test Integers converted to Logicals
++ if (lpos.EQ.ineg) STOP 7 ! { dg-error "Operands of comparison operator" }
++ if (ineg.EQ.lpos) STOP 8 ! { dg-error "Operands of comparison operator" }
++ lres = (.true..EQ.0) ! { dg-error "Operands of comparison operator" }
++ if (lres) STOP 9
++ lres = (1.EQ..false.) ! { dg-error "Operands of comparison operator" }
++ if (lres) STOP 10
++ END
+diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
+new file mode 100644
+index 00000000000..446873eb2dc
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f
+@@ -0,0 +1,33 @@
++! { dg-do compile }
++! { dg-options "-std=legacy -flogical-as-integer" }
++!
++! Test conversion between logical and integer for logical operators
++!
++ program test
++ logical f /.false./
++ logical t /.true./
++ real x
++
++ x = 7.7
++ x = x + t*3.0
++ if (abs(x - 10.7).gt.0.00001) stop 1
++ x = x + .false.*5.0
++ if (abs(x - 10.7).gt.0.00001) stop 2
++ x = x - .true.*5.0
++ if (abs(x - 5.7).gt.0.00001) stop 3
++ x = x + t
++ if (abs(x - 6.7).gt.0.00001) stop 4
++ x = x + f
++ if (abs(x - 6.7).gt.0.00001) stop 5
++ x = x - t
++ if (abs(x - 5.7).gt.0.00001) stop 6
++ x = x - f
++ if (abs(x - 5.7).gt.0.00001) stop 7
++ x = x**.true.
++ if (abs(x - 5.7).gt.0.00001) stop 8
++ x = x**.false.
++ if (abs(x - 1.0).gt.0.00001) stop 9
++ x = x/t
++ if (abs(x - 1.0).gt.0.00001) stop 10
++ if ((x/.false.).le.huge(x)) stop 11
++ end
+diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
+new file mode 100644
+index 00000000000..4301a4988d8
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f
+@@ -0,0 +1,33 @@
++! { dg-do compile }
++! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" }
++!
++! Test conversion between logical and integer for logical operators
++!
++ program test
++ logical f /.false./
++ logical t /.true./
++ real x
++
++ x = 7.7
++ x = x + t*3.0 ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 10.7).gt.0.00001) stop 1
++ x = x + .false.*5.0 ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 10.7).gt.0.00001) stop 2
++ x = x - .true.*5.0 ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 5.7).gt.0.00001) stop 3
++ x = x + t ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 6.7).gt.0.00001) stop 4
++ x = x + f ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 6.7).gt.0.00001) stop 5
++ x = x - t ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 5.7).gt.0.00001) stop 6
++ x = x - f ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 5.7).gt.0.00001) stop 7
++ x = x**.true. ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 5.7).gt.0.00001) stop 8
++ x = x**.false. ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 1.0).gt.0.00001) stop 9
++ x = x/t ! { dg-error "Operands of binary numeric" }
++ if (abs(x - 1.0).gt.0.00001) stop 10
++ if ((x/.false.).le.huge(x)) stop 11 ! { dg-error "Operands of binary numeric" }
++ end
+--
+2.27.0
+
diff --git a/gcc13-hack.patch b/gcc13-hack.patch
new file mode 100644
index 0000000..e98649e
--- /dev/null
+++ b/gcc13-hack.patch
@@ -0,0 +1,126 @@
+--- libada/Makefile.in.jj 2019-01-09 13:01:18.015608205 +0100
++++ libada/Makefile.in 2019-01-11 18:16:23.441726931 +0100
+@@ -71,18 +71,40 @@ version := $(shell @get_gcc_base_ver@ $(
+ libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
+ ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
+
++DEFAULTMULTIFLAGS :=
++ifeq ($(MULTISUBDIR),)
++targ:=$(subst -, ,$(target))
++arch:=$(word 1,$(targ))
++ifeq ($(words $(targ)),2)
++osys:=$(word 2,$(targ))
++else
++osys:=$(word 3,$(targ))
++endif
++ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),)
++ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64)
++DEFAULTMULTIFLAGS := -m64
++else
++ifeq ($(strip $(filter-out s390%, $(arch))),)
++DEFAULTMULTIFLAGS := -m31
++else
++DEFAULTMULTIFLAGS := -m32
++endif
++endif
++endif
++endif
++
+ # exeext should not be used because it's the *host* exeext. We're building
+ # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus
+ # definitions just in case something slips through the safety net provided
+ # by recursive make invocations in gcc/ada/Makefile.in
+ LIBADA_FLAGS_TO_PASS = \
+ "MAKEOVERRIDES=" \
+- "LDFLAGS=$(LDFLAGS)" \
++ "LDFLAGS=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \
+ "LN_S=$(LN_S)" \
+ "SHELL=$(SHELL)" \
+- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
+- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
+- "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \
++ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
++ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
++ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \
+ "PICFLAG_FOR_TARGET=$(PICFLAG)" \
+ "THREAD_KIND=$(THREAD_KIND)" \
+ "TRACE=$(TRACE)" \
+@@ -93,7 +115,7 @@ LIBADA_FLAGS_TO_PASS = \
+ "exeext=.exeext.should.not.be.used " \
+ 'CC=the.host.compiler.should.not.be.needed' \
+ "GCC_FOR_TARGET=$(CC)" \
+- "CFLAGS=$(CFLAGS)"
++ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)"
+
+ .PHONY: libada gnatlib gnatlib-shared gnatlib-sjlj gnatlib-zcx osconstool
+
+--- config-ml.in.jj 2019-01-09 12:50:16.646501448 +0100
++++ config-ml.in 2019-01-11 18:16:23.442726914 +0100
+@@ -511,6 +511,8 @@ multi-do:
+ ADAFLAGS="$(ADAFLAGS) $${flags}" \
+ prefix="$(prefix)" \
+ exec_prefix="$(exec_prefix)" \
++ mandir="$(mandir)" \
++ infodir="$(infodir)" \
+ GOCFLAGS="$(GOCFLAGS) $${flags}" \
+ GDCFLAGS="$(GDCFLAGS) $${flags}" \
+ CXXFLAGS="$(CXXFLAGS) $${flags}" \
+--- libcpp/macro.cc.jj 2019-01-09 13:01:21.420552123 +0100
++++ libcpp/macro.cc 2019-01-11 18:18:17.736876285 +0100
+@@ -3256,8 +3256,6 @@ static cpp_macro *
+ create_iso_definition (cpp_reader *pfile)
+ {
+ bool following_paste_op = false;
+- const char *paste_op_error_msg =
+- N_("'##' cannot appear at either end of a macro expansion");
+ unsigned int num_extra_tokens = 0;
+ unsigned nparms = 0;
+ cpp_hashnode **params = NULL;
+@@ -3382,7 +3380,9 @@ create_iso_definition (cpp_reader *pfile
+ function-like macros, but not at the end. */
+ if (following_paste_op)
+ {
+- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
++ cpp_error (pfile, CPP_DL_ERROR,
++ "'##' cannot appear at either end of a macro "
++ "expansion");
+ goto out;
+ }
+ if (!vaopt_tracker.completed ())
+@@ -3397,7 +3397,9 @@ create_iso_definition (cpp_reader *pfile
+ function-like macros, but not at the beginning. */
+ if (macro->count == 1)
+ {
+- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg);
++ cpp_error (pfile, CPP_DL_ERROR,
++ "'##' cannot appear at either end of a macro "
++ "expansion");
+ goto out;
+ }
+
+--- libcpp/expr.cc.jj 2019-01-09 13:01:22.415535734 +0100
++++ libcpp/expr.cc 2019-01-11 18:16:23.444726882 +0100
+@@ -803,16 +803,17 @@ cpp_classify_number (cpp_reader *pfile,
+ if ((result & CPP_N_WIDTH) == CPP_N_LARGE
+ && CPP_OPTION (pfile, cpp_warn_long_long))
+ {
+- const char *message = CPP_OPTION (pfile, cplusplus)
+- ? N_("use of C++11 long long integer constant")
+- : N_("use of C99 long long integer constant");
+-
+ if (CPP_OPTION (pfile, c99))
+ cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location,
+- 0, message);
++ 0, CPP_OPTION (pfile, cplusplus)
++ ? N_("use of C++11 long long integer constant")
++ : N_("use of C99 long long integer constant"));
+ else
+ cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG,
+- virtual_location, 0, message);
++ virtual_location, 0,
++ CPP_OPTION (pfile, cplusplus)
++ ? N_("use of C++11 long long integer constant")
++ : N_("use of C99 long long integer constant"));
+ }
+
+ if ((result & CPP_N_SIZE_T) == CPP_N_SIZE_T
diff --git a/gcc13-isl-dl.patch b/gcc13-isl-dl.patch
new file mode 100644
index 0000000..20dd8bf
--- /dev/null
+++ b/gcc13-isl-dl.patch
@@ -0,0 +1,716 @@
+--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200
++++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100
+@@ -1063,7 +1063,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
+ # and the system's installed libraries.
+ LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \
+ $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS)
+-BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
++BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
+ $(ZLIB) $(ZSTD_LIB)
+ # Any system libraries needed just for GNAT.
+ SYSLIBS = @GNAT_LIBEXC@
+@@ -2302,6 +2302,15 @@ $(out_object_file): $(out_file)
+ $(common_out_object_file): $(common_out_file)
+ $(COMPILE) $<
+ $(POSTCOMPILE)
++
++graphite%.o : \
++ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
++graphite.o : \
++ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS))
++graphite%.o : \
++ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
++graphite.o : \
++ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS))
+ #
+ # Generate header and source files from the machine description,
+ # and compile them.
+--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100
++++ gcc/graphite.h 2022-11-03 19:14:50.369690720 +0100
+@@ -24,6 +24,591 @@ along with GCC; see the file COPYING3.
+
+ #include "sese.h"
+
++#include
++#include
++
++#define DYNSYMS \
++ DYNSYM (isl_aff_add_coefficient_si); \
++ DYNSYM (isl_aff_free); \
++ DYNSYM (isl_aff_get_space); \
++ DYNSYM (isl_aff_set_coefficient_si); \
++ DYNSYM (isl_aff_set_constant_si); \
++ DYNSYM (isl_aff_zero_on_domain); \
++ /* DYNSYM (isl_band_free); */ \
++ /* DYNSYM (isl_band_get_children); */ \
++ /* DYNSYM (isl_band_get_partial_schedule); */ \
++ /* DYNSYM (isl_band_has_children); */ \
++ /* DYNSYM (isl_band_list_free); */ \
++ /* DYNSYM (isl_band_list_get_band); */ \
++ /* DYNSYM (isl_band_list_get_ctx); */ \
++ /* DYNSYM (isl_band_list_n_band); */ \
++ /* DYNSYM (isl_band_n_member); */ \
++ DYNSYM (isl_basic_map_add_constraint); \
++ DYNSYM (isl_basic_map_project_out); \
++ DYNSYM (isl_basic_map_universe); \
++ DYNSYM (isl_constraint_set_coefficient_si); \
++ DYNSYM (isl_constraint_set_constant_si); \
++ DYNSYM (isl_ctx_alloc); \
++ DYNSYM (isl_ctx_free); \
++ DYNSYM (isl_equality_alloc); \
++ DYNSYM (isl_id_alloc); \
++ DYNSYM (isl_id_copy); \
++ DYNSYM (isl_id_free); \
++ DYNSYM (isl_inequality_alloc); \
++ DYNSYM (isl_local_space_copy); \
++ DYNSYM (isl_local_space_free); \
++ DYNSYM (isl_local_space_from_space); \
++ DYNSYM (isl_local_space_range); \
++ DYNSYM (isl_map_add_constraint); \
++ DYNSYM (isl_map_add_dims); \
++ DYNSYM (isl_map_align_params); \
++ DYNSYM (isl_map_apply_range); \
++ DYNSYM (isl_map_copy); \
++ DYNSYM (isl_map_dim); \
++ DYNSYM (isl_map_dump); \
++ DYNSYM (isl_map_equate); \
++ DYNSYM (isl_map_fix_si); \
++ DYNSYM (isl_map_flat_product); \
++ DYNSYM (isl_map_flat_range_product); \
++ DYNSYM (isl_map_free); \
++ DYNSYM (isl_map_from_basic_map); \
++ DYNSYM (isl_map_from_pw_aff); \
++ DYNSYM (isl_map_from_union_map); \
++ DYNSYM (isl_map_get_ctx); \
++ DYNSYM (isl_map_get_space); \
++ DYNSYM (isl_map_get_tuple_id); \
++ DYNSYM (isl_map_insert_dims); \
++ DYNSYM (isl_map_intersect); \
++ DYNSYM (isl_map_intersect_domain); \
++ DYNSYM (isl_map_intersect_range); \
++ DYNSYM (isl_map_is_empty); \
++ DYNSYM (isl_map_lex_ge); \
++ DYNSYM (isl_map_lex_le); \
++ /* DYNSYM (isl_map_n_out); */ \
++ DYNSYM (isl_map_range); \
++ DYNSYM (isl_map_set_tuple_id); \
++ DYNSYM (isl_map_universe); \
++ DYNSYM (isl_options_set_on_error); \
++ DYNSYM (isl_options_set_schedule_serialize_sccs); \
++ DYNSYM (isl_printer_set_yaml_style); \
++ DYNSYM (isl_options_set_schedule_max_constant_term); \
++ DYNSYM (isl_options_set_schedule_maximize_band_depth); \
++ DYNSYM (isl_printer_free); \
++ DYNSYM (isl_printer_print_aff); \
++ DYNSYM (isl_printer_print_constraint); \
++ DYNSYM (isl_printer_print_map); \
++ DYNSYM (isl_printer_print_set); \
++ DYNSYM (isl_printer_to_file); \
++ DYNSYM (isl_pw_aff_add); \
++ DYNSYM (isl_pw_aff_alloc); \
++ DYNSYM (isl_pw_aff_copy); \
++ DYNSYM (isl_pw_aff_eq_set); \
++ DYNSYM (isl_pw_aff_free); \
++ DYNSYM (isl_pw_aff_from_aff); \
++ DYNSYM (isl_pw_aff_ge_set); \
++ DYNSYM (isl_pw_aff_gt_set); \
++ DYNSYM (isl_pw_aff_is_cst); \
++ DYNSYM (isl_pw_aff_le_set); \
++ DYNSYM (isl_pw_aff_lt_set); \
++ DYNSYM (isl_pw_aff_mul); \
++ DYNSYM (isl_pw_aff_ne_set); \
++ DYNSYM (isl_pw_aff_nonneg_set); \
++ DYNSYM (isl_pw_aff_set_tuple_id); \
++ DYNSYM (isl_pw_aff_sub); \
++ DYNSYM (isl_pw_aff_zero_set); \
++ DYNSYM (isl_schedule_free); \
++ /* DYNSYM (isl_schedule_get_band_forest); */ \
++ DYNSYM (isl_set_add_constraint); \
++ DYNSYM (isl_set_add_dims); \
++ DYNSYM (isl_set_apply); \
++ DYNSYM (isl_set_coalesce); \
++ DYNSYM (isl_set_copy); \
++ DYNSYM (isl_set_dim); \
++ DYNSYM (isl_set_fix_si); \
++ DYNSYM (isl_set_free); \
++ DYNSYM (isl_set_get_space); \
++ DYNSYM (isl_set_get_tuple_id); \
++ DYNSYM (isl_set_intersect); \
++ DYNSYM (isl_set_is_empty); \
++ DYNSYM (isl_set_n_dim); \
++ DYNSYM (isl_set_nat_universe); \
++ DYNSYM (isl_set_project_out); \
++ DYNSYM (isl_set_set_tuple_id); \
++ DYNSYM (isl_set_universe); \
++ DYNSYM (isl_space_add_dims); \
++ DYNSYM (isl_space_alloc); \
++ DYNSYM (isl_space_copy); \
++ DYNSYM (isl_space_dim); \
++ DYNSYM (isl_space_domain); \
++ DYNSYM (isl_space_find_dim_by_id); \
++ DYNSYM (isl_space_free); \
++ DYNSYM (isl_space_from_domain); \
++ DYNSYM (isl_space_get_tuple_id); \
++ DYNSYM (isl_space_params_alloc); \
++ DYNSYM (isl_space_range); \
++ DYNSYM (isl_space_set_alloc); \
++ DYNSYM (isl_space_set_dim_id); \
++ DYNSYM (isl_space_set_tuple_id); \
++ DYNSYM (isl_union_map_add_map); \
++ DYNSYM (isl_union_map_align_params); \
++ DYNSYM (isl_union_map_apply_domain); \
++ DYNSYM (isl_union_map_apply_range); \
++ DYNSYM (isl_union_map_compute_flow); \
++ DYNSYM (isl_union_map_copy); \
++ DYNSYM (isl_union_map_empty); \
++ DYNSYM (isl_union_map_flat_range_product); \
++ DYNSYM (isl_union_map_foreach_map); \
++ DYNSYM (isl_union_map_free); \
++ DYNSYM (isl_union_map_from_map); \
++ DYNSYM (isl_union_map_get_ctx); \
++ DYNSYM (isl_union_map_get_space); \
++ DYNSYM (isl_union_map_gist_domain); \
++ DYNSYM (isl_union_map_gist_range); \
++ DYNSYM (isl_union_map_intersect_domain); \
++ DYNSYM (isl_union_map_is_empty); \
++ DYNSYM (isl_union_map_subtract); \
++ DYNSYM (isl_union_map_union); \
++ DYNSYM (isl_union_set_add_set); \
++ DYNSYM (isl_union_set_compute_schedule); \
++ DYNSYM (isl_union_set_copy); \
++ DYNSYM (isl_union_set_empty); \
++ DYNSYM (isl_union_set_from_set); \
++ DYNSYM (isl_aff_add_constant_val); \
++ DYNSYM (isl_aff_get_coefficient_val); \
++ DYNSYM (isl_aff_get_ctx); \
++ DYNSYM (isl_aff_mod_val); \
++ DYNSYM (isl_ast_build_ast_from_schedule); \
++ DYNSYM (isl_ast_build_free); \
++ DYNSYM (isl_ast_build_from_context); \
++ DYNSYM (isl_ast_build_get_ctx); \
++ DYNSYM (isl_ast_build_get_schedule); \
++ DYNSYM (isl_ast_build_get_schedule_space); \
++ DYNSYM (isl_ast_build_set_before_each_for); \
++ DYNSYM (isl_ast_build_set_options); \
++ DYNSYM (isl_ast_expr_free); \
++ DYNSYM (isl_ast_expr_from_val); \
++ DYNSYM (isl_ast_expr_get_ctx); \
++ DYNSYM (isl_ast_expr_get_id); \
++ DYNSYM (isl_ast_expr_get_op_arg); \
++ DYNSYM (isl_ast_expr_get_op_n_arg); \
++ DYNSYM (isl_ast_expr_get_op_type); \
++ DYNSYM (isl_ast_expr_get_type); \
++ DYNSYM (isl_ast_expr_get_val); \
++ DYNSYM (isl_ast_expr_sub); \
++ DYNSYM (isl_ast_node_block_get_children); \
++ DYNSYM (isl_ast_node_for_get_body); \
++ DYNSYM (isl_ast_node_for_get_cond); \
++ DYNSYM (isl_ast_node_for_get_inc); \
++ DYNSYM (isl_ast_node_for_get_init); \
++ DYNSYM (isl_ast_node_for_get_iterator); \
++ DYNSYM (isl_ast_node_free); \
++ DYNSYM (isl_ast_node_get_annotation); \
++ DYNSYM (isl_ast_node_get_type); \
++ DYNSYM (isl_ast_node_if_get_cond); \
++ DYNSYM (isl_ast_node_if_get_else); \
++ DYNSYM (isl_ast_node_if_get_then); \
++ DYNSYM (isl_ast_node_list_free); \
++ DYNSYM (isl_ast_node_list_get_ast_node); \
++ DYNSYM (isl_ast_node_list_n_ast_node); \
++ DYNSYM (isl_ast_node_user_get_expr); \
++ DYNSYM (isl_constraint_set_coefficient_val); \
++ DYNSYM (isl_constraint_set_constant_val); \
++ DYNSYM (isl_id_get_user); \
++ DYNSYM (isl_local_space_get_ctx); \
++ DYNSYM (isl_map_fix_val); \
++ DYNSYM (isl_options_set_ast_build_atomic_upper_bound); \
++ DYNSYM (isl_printer_print_ast_node); \
++ DYNSYM (isl_printer_print_str); \
++ DYNSYM (isl_printer_set_output_format); \
++ DYNSYM (isl_pw_aff_mod_val); \
++ DYNSYM (isl_schedule_constraints_compute_schedule); \
++ DYNSYM (isl_schedule_constraints_on_domain); \
++ DYNSYM (isl_schedule_constraints_set_coincidence); \
++ DYNSYM (isl_schedule_constraints_set_proximity); \
++ DYNSYM (isl_schedule_constraints_set_validity); \
++ DYNSYM (isl_set_get_dim_id); \
++ DYNSYM (isl_set_max_val); \
++ DYNSYM (isl_set_min_val); \
++ DYNSYM (isl_set_params); \
++ DYNSYM (isl_space_align_params); \
++ DYNSYM (isl_space_map_from_domain_and_range); \
++ DYNSYM (isl_space_set_tuple_name); \
++ DYNSYM (isl_space_wrap); \
++ DYNSYM (isl_union_map_from_domain_and_range); \
++ DYNSYM (isl_union_map_range); \
++ DYNSYM (isl_union_set_union); \
++ DYNSYM (isl_union_set_universe); \
++ DYNSYM (isl_val_2exp); \
++ DYNSYM (isl_val_add_ui); \
++ DYNSYM (isl_val_copy); \
++ DYNSYM (isl_val_free); \
++ DYNSYM (isl_val_int_from_si); \
++ DYNSYM (isl_val_int_from_ui); \
++ DYNSYM (isl_val_mul); \
++ DYNSYM (isl_val_neg); \
++ DYNSYM (isl_val_sub); \
++ DYNSYM (isl_printer_print_union_map); \
++ DYNSYM (isl_pw_aff_get_ctx); \
++ DYNSYM (isl_val_is_int); \
++ DYNSYM (isl_ctx_get_max_operations); \
++ DYNSYM (isl_ctx_set_max_operations); \
++ DYNSYM (isl_ctx_last_error); \
++ DYNSYM (isl_ctx_reset_operations); \
++ DYNSYM (isl_map_coalesce); \
++ DYNSYM (isl_printer_print_schedule); \
++ DYNSYM (isl_set_set_dim_id); \
++ DYNSYM (isl_union_map_coalesce); \
++ DYNSYM (isl_multi_val_set_val); \
++ DYNSYM (isl_multi_val_zero); \
++ DYNSYM (isl_options_set_schedule_max_coefficient); \
++ DYNSYM (isl_options_set_tile_scale_tile_loops); \
++ DYNSYM (isl_schedule_copy); \
++ DYNSYM (isl_schedule_get_map); \
++ DYNSYM (isl_schedule_map_schedule_node_bottom_up); \
++ DYNSYM (isl_schedule_node_band_get_permutable); \
++ DYNSYM (isl_schedule_node_band_get_space); \
++ DYNSYM (isl_schedule_node_band_tile); \
++ DYNSYM (isl_schedule_node_child); \
++ DYNSYM (isl_schedule_node_free); \
++ DYNSYM (isl_schedule_node_get_child); \
++ DYNSYM (isl_schedule_node_get_ctx); \
++ DYNSYM (isl_schedule_node_get_type); \
++ DYNSYM (isl_schedule_node_n_children); \
++ DYNSYM (isl_union_map_is_equal); \
++ DYNSYM (isl_union_access_info_compute_flow); \
++ DYNSYM (isl_union_access_info_from_sink); \
++ DYNSYM (isl_union_access_info_set_may_source); \
++ DYNSYM (isl_union_access_info_set_must_source); \
++ DYNSYM (isl_union_access_info_set_schedule); \
++ DYNSYM (isl_union_flow_free); \
++ DYNSYM (isl_union_flow_get_may_dependence); \
++ DYNSYM (isl_union_flow_get_must_dependence); \
++ DYNSYM (isl_aff_var_on_domain); \
++ DYNSYM (isl_multi_aff_from_aff); \
++ DYNSYM (isl_schedule_get_ctx); \
++ DYNSYM (isl_multi_aff_set_tuple_id); \
++ DYNSYM (isl_multi_aff_dim); \
++ DYNSYM (isl_schedule_get_domain); \
++ DYNSYM (isl_union_set_is_empty); \
++ DYNSYM (isl_union_set_get_space); \
++ DYNSYM (isl_union_pw_multi_aff_empty); \
++ DYNSYM (isl_union_set_foreach_set); \
++ DYNSYM (isl_union_set_free); \
++ DYNSYM (isl_multi_union_pw_aff_from_union_pw_multi_aff); \
++ DYNSYM (isl_multi_union_pw_aff_apply_multi_aff); \
++ DYNSYM (isl_schedule_insert_partial_schedule); \
++ DYNSYM (isl_union_pw_multi_aff_free); \
++ DYNSYM (isl_pw_multi_aff_project_out_map); \
++ DYNSYM (isl_union_pw_multi_aff_add_pw_multi_aff); \
++ DYNSYM (isl_schedule_from_domain); \
++ DYNSYM (isl_schedule_sequence); \
++ DYNSYM (isl_ast_build_node_from_schedule); \
++ DYNSYM (isl_ast_node_mark_get_node); \
++ DYNSYM (isl_schedule_node_band_member_get_ast_loop_type); \
++ DYNSYM (isl_schedule_node_band_member_set_ast_loop_type); \
++ DYNSYM (isl_val_n_abs_num_chunks); \
++ DYNSYM (isl_val_get_abs_num_chunks); \
++ DYNSYM (isl_val_int_from_chunks); \
++ DYNSYM (isl_val_is_neg); \
++ DYNSYM (isl_version); \
++ DYNSYM (isl_options_get_on_error); \
++ DYNSYM (isl_ctx_reset_error);
++
++extern struct isl_pointers_s__
++{
++ bool inited;
++ void *h;
++#define DYNSYM(x) __typeof (x) *p_##x
++ DYNSYMS
++#undef DYNSYM
++} isl_pointers__;
++
++#define isl_aff_add_coefficient_si (*isl_pointers__.p_isl_aff_add_coefficient_si)
++#define isl_aff_free (*isl_pointers__.p_isl_aff_free)
++#define isl_aff_get_space (*isl_pointers__.p_isl_aff_get_space)
++#define isl_aff_set_coefficient_si (*isl_pointers__.p_isl_aff_set_coefficient_si)
++#define isl_aff_set_constant_si (*isl_pointers__.p_isl_aff_set_constant_si)
++#define isl_aff_zero_on_domain (*isl_pointers__.p_isl_aff_zero_on_domain)
++#define isl_band_free (*isl_pointers__.p_isl_band_free)
++#define isl_band_get_children (*isl_pointers__.p_isl_band_get_children)
++#define isl_band_get_partial_schedule (*isl_pointers__.p_isl_band_get_partial_schedule)
++#define isl_band_has_children (*isl_pointers__.p_isl_band_has_children)
++#define isl_band_list_free (*isl_pointers__.p_isl_band_list_free)
++#define isl_band_list_get_band (*isl_pointers__.p_isl_band_list_get_band)
++#define isl_band_list_get_ctx (*isl_pointers__.p_isl_band_list_get_ctx)
++#define isl_band_list_n_band (*isl_pointers__.p_isl_band_list_n_band)
++#define isl_band_n_member (*isl_pointers__.p_isl_band_n_member)
++#define isl_basic_map_add_constraint (*isl_pointers__.p_isl_basic_map_add_constraint)
++#define isl_basic_map_project_out (*isl_pointers__.p_isl_basic_map_project_out)
++#define isl_basic_map_universe (*isl_pointers__.p_isl_basic_map_universe)
++#define isl_constraint_set_coefficient_si (*isl_pointers__.p_isl_constraint_set_coefficient_si)
++#define isl_constraint_set_constant_si (*isl_pointers__.p_isl_constraint_set_constant_si)
++#define isl_ctx_alloc (*isl_pointers__.p_isl_ctx_alloc)
++#define isl_ctx_free (*isl_pointers__.p_isl_ctx_free)
++#define isl_equality_alloc (*isl_pointers__.p_isl_equality_alloc)
++#define isl_id_alloc (*isl_pointers__.p_isl_id_alloc)
++#define isl_id_copy (*isl_pointers__.p_isl_id_copy)
++#define isl_id_free (*isl_pointers__.p_isl_id_free)
++#define isl_inequality_alloc (*isl_pointers__.p_isl_inequality_alloc)
++#define isl_local_space_copy (*isl_pointers__.p_isl_local_space_copy)
++#define isl_local_space_free (*isl_pointers__.p_isl_local_space_free)
++#define isl_local_space_from_space (*isl_pointers__.p_isl_local_space_from_space)
++#define isl_local_space_range (*isl_pointers__.p_isl_local_space_range)
++#define isl_map_add_constraint (*isl_pointers__.p_isl_map_add_constraint)
++#define isl_map_add_dims (*isl_pointers__.p_isl_map_add_dims)
++#define isl_map_align_params (*isl_pointers__.p_isl_map_align_params)
++#define isl_map_apply_range (*isl_pointers__.p_isl_map_apply_range)
++#define isl_map_copy (*isl_pointers__.p_isl_map_copy)
++#define isl_map_dim (*isl_pointers__.p_isl_map_dim)
++#define isl_map_dump (*isl_pointers__.p_isl_map_dump)
++#define isl_map_equate (*isl_pointers__.p_isl_map_equate)
++#define isl_map_fix_si (*isl_pointers__.p_isl_map_fix_si)
++#define isl_map_flat_product (*isl_pointers__.p_isl_map_flat_product)
++#define isl_map_flat_range_product (*isl_pointers__.p_isl_map_flat_range_product)
++#define isl_map_free (*isl_pointers__.p_isl_map_free)
++#define isl_map_from_basic_map (*isl_pointers__.p_isl_map_from_basic_map)
++#define isl_map_from_pw_aff (*isl_pointers__.p_isl_map_from_pw_aff)
++#define isl_map_from_union_map (*isl_pointers__.p_isl_map_from_union_map)
++#define isl_map_get_ctx (*isl_pointers__.p_isl_map_get_ctx)
++#define isl_map_get_space (*isl_pointers__.p_isl_map_get_space)
++#define isl_map_get_tuple_id (*isl_pointers__.p_isl_map_get_tuple_id)
++#define isl_map_insert_dims (*isl_pointers__.p_isl_map_insert_dims)
++#define isl_map_intersect (*isl_pointers__.p_isl_map_intersect)
++#define isl_map_intersect_domain (*isl_pointers__.p_isl_map_intersect_domain)
++#define isl_map_intersect_range (*isl_pointers__.p_isl_map_intersect_range)
++#define isl_map_is_empty (*isl_pointers__.p_isl_map_is_empty)
++#define isl_map_lex_ge (*isl_pointers__.p_isl_map_lex_ge)
++#define isl_map_lex_le (*isl_pointers__.p_isl_map_lex_le)
++#define isl_map_n_out (*isl_pointers__.p_isl_map_n_out)
++#define isl_map_range (*isl_pointers__.p_isl_map_range)
++#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id)
++#define isl_map_universe (*isl_pointers__.p_isl_map_universe)
++#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error)
++#define isl_options_set_schedule_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs)
++#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style)
++#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term)
++#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth)
++#define isl_printer_free (*isl_pointers__.p_isl_printer_free)
++#define isl_printer_print_aff (*isl_pointers__.p_isl_printer_print_aff)
++#define isl_printer_print_constraint (*isl_pointers__.p_isl_printer_print_constraint)
++#define isl_printer_print_map (*isl_pointers__.p_isl_printer_print_map)
++#define isl_printer_print_set (*isl_pointers__.p_isl_printer_print_set)
++#define isl_printer_to_file (*isl_pointers__.p_isl_printer_to_file)
++#define isl_pw_aff_add (*isl_pointers__.p_isl_pw_aff_add)
++#define isl_pw_aff_alloc (*isl_pointers__.p_isl_pw_aff_alloc)
++#define isl_pw_aff_copy (*isl_pointers__.p_isl_pw_aff_copy)
++#define isl_pw_aff_eq_set (*isl_pointers__.p_isl_pw_aff_eq_set)
++#define isl_pw_aff_free (*isl_pointers__.p_isl_pw_aff_free)
++#define isl_pw_aff_from_aff (*isl_pointers__.p_isl_pw_aff_from_aff)
++#define isl_pw_aff_ge_set (*isl_pointers__.p_isl_pw_aff_ge_set)
++#define isl_pw_aff_gt_set (*isl_pointers__.p_isl_pw_aff_gt_set)
++#define isl_pw_aff_is_cst (*isl_pointers__.p_isl_pw_aff_is_cst)
++#define isl_pw_aff_le_set (*isl_pointers__.p_isl_pw_aff_le_set)
++#define isl_pw_aff_lt_set (*isl_pointers__.p_isl_pw_aff_lt_set)
++#define isl_pw_aff_mul (*isl_pointers__.p_isl_pw_aff_mul)
++#define isl_pw_aff_ne_set (*isl_pointers__.p_isl_pw_aff_ne_set)
++#define isl_pw_aff_nonneg_set (*isl_pointers__.p_isl_pw_aff_nonneg_set)
++#define isl_pw_aff_set_tuple_id (*isl_pointers__.p_isl_pw_aff_set_tuple_id)
++#define isl_pw_aff_sub (*isl_pointers__.p_isl_pw_aff_sub)
++#define isl_pw_aff_zero_set (*isl_pointers__.p_isl_pw_aff_zero_set)
++#define isl_schedule_free (*isl_pointers__.p_isl_schedule_free)
++#define isl_schedule_get_band_forest (*isl_pointers__.p_isl_schedule_get_band_forest)
++#define isl_set_add_constraint (*isl_pointers__.p_isl_set_add_constraint)
++#define isl_set_add_dims (*isl_pointers__.p_isl_set_add_dims)
++#define isl_set_apply (*isl_pointers__.p_isl_set_apply)
++#define isl_set_coalesce (*isl_pointers__.p_isl_set_coalesce)
++#define isl_set_copy (*isl_pointers__.p_isl_set_copy)
++#define isl_set_dim (*isl_pointers__.p_isl_set_dim)
++#define isl_set_fix_si (*isl_pointers__.p_isl_set_fix_si)
++#define isl_set_free (*isl_pointers__.p_isl_set_free)
++#define isl_set_get_space (*isl_pointers__.p_isl_set_get_space)
++#define isl_set_get_tuple_id (*isl_pointers__.p_isl_set_get_tuple_id)
++#define isl_set_intersect (*isl_pointers__.p_isl_set_intersect)
++#define isl_set_is_empty (*isl_pointers__.p_isl_set_is_empty)
++#define isl_set_n_dim (*isl_pointers__.p_isl_set_n_dim)
++#define isl_set_nat_universe (*isl_pointers__.p_isl_set_nat_universe)
++#define isl_set_project_out (*isl_pointers__.p_isl_set_project_out)
++#define isl_set_set_tuple_id (*isl_pointers__.p_isl_set_set_tuple_id)
++#define isl_set_universe (*isl_pointers__.p_isl_set_universe)
++#define isl_space_add_dims (*isl_pointers__.p_isl_space_add_dims)
++#define isl_space_alloc (*isl_pointers__.p_isl_space_alloc)
++#define isl_space_copy (*isl_pointers__.p_isl_space_copy)
++#define isl_space_dim (*isl_pointers__.p_isl_space_dim)
++#define isl_space_domain (*isl_pointers__.p_isl_space_domain)
++#define isl_space_find_dim_by_id (*isl_pointers__.p_isl_space_find_dim_by_id)
++#define isl_space_free (*isl_pointers__.p_isl_space_free)
++#define isl_space_from_domain (*isl_pointers__.p_isl_space_from_domain)
++#define isl_space_get_tuple_id (*isl_pointers__.p_isl_space_get_tuple_id)
++#define isl_space_params_alloc (*isl_pointers__.p_isl_space_params_alloc)
++#define isl_space_range (*isl_pointers__.p_isl_space_range)
++#define isl_space_set_alloc (*isl_pointers__.p_isl_space_set_alloc)
++#define isl_space_set_dim_id (*isl_pointers__.p_isl_space_set_dim_id)
++#define isl_space_set_tuple_id (*isl_pointers__.p_isl_space_set_tuple_id)
++#define isl_union_map_add_map (*isl_pointers__.p_isl_union_map_add_map)
++#define isl_union_map_align_params (*isl_pointers__.p_isl_union_map_align_params)
++#define isl_union_map_apply_domain (*isl_pointers__.p_isl_union_map_apply_domain)
++#define isl_union_map_apply_range (*isl_pointers__.p_isl_union_map_apply_range)
++#define isl_union_map_compute_flow (*isl_pointers__.p_isl_union_map_compute_flow)
++#define isl_union_map_copy (*isl_pointers__.p_isl_union_map_copy)
++#define isl_union_map_empty (*isl_pointers__.p_isl_union_map_empty)
++#define isl_union_map_flat_range_product (*isl_pointers__.p_isl_union_map_flat_range_product)
++#define isl_union_map_foreach_map (*isl_pointers__.p_isl_union_map_foreach_map)
++#define isl_union_map_free (*isl_pointers__.p_isl_union_map_free)
++#define isl_union_map_from_map (*isl_pointers__.p_isl_union_map_from_map)
++#define isl_union_map_get_ctx (*isl_pointers__.p_isl_union_map_get_ctx)
++#define isl_union_map_get_space (*isl_pointers__.p_isl_union_map_get_space)
++#define isl_union_map_gist_domain (*isl_pointers__.p_isl_union_map_gist_domain)
++#define isl_union_map_gist_range (*isl_pointers__.p_isl_union_map_gist_range)
++#define isl_union_map_intersect_domain (*isl_pointers__.p_isl_union_map_intersect_domain)
++#define isl_union_map_is_empty (*isl_pointers__.p_isl_union_map_is_empty)
++#define isl_union_map_subtract (*isl_pointers__.p_isl_union_map_subtract)
++#define isl_union_map_union (*isl_pointers__.p_isl_union_map_union)
++#define isl_union_set_add_set (*isl_pointers__.p_isl_union_set_add_set)
++#define isl_union_set_compute_schedule (*isl_pointers__.p_isl_union_set_compute_schedule)
++#define isl_union_set_copy (*isl_pointers__.p_isl_union_set_copy)
++#define isl_union_set_empty (*isl_pointers__.p_isl_union_set_empty)
++#define isl_union_set_from_set (*isl_pointers__.p_isl_union_set_from_set)
++#define isl_aff_add_constant_val (*isl_pointers__.p_isl_aff_add_constant_val)
++#define isl_aff_get_coefficient_val (*isl_pointers__.p_isl_aff_get_coefficient_val)
++#define isl_aff_get_ctx (*isl_pointers__.p_isl_aff_get_ctx)
++#define isl_aff_mod_val (*isl_pointers__.p_isl_aff_mod_val)
++#define isl_ast_build_ast_from_schedule (*isl_pointers__.p_isl_ast_build_ast_from_schedule)
++#define isl_ast_build_free (*isl_pointers__.p_isl_ast_build_free)
++#define isl_ast_build_from_context (*isl_pointers__.p_isl_ast_build_from_context)
++#define isl_ast_build_get_ctx (*isl_pointers__.p_isl_ast_build_get_ctx)
++#define isl_ast_build_get_schedule (*isl_pointers__.p_isl_ast_build_get_schedule)
++#define isl_ast_build_get_schedule_space (*isl_pointers__.p_isl_ast_build_get_schedule_space)
++#define isl_ast_build_set_before_each_for (*isl_pointers__.p_isl_ast_build_set_before_each_for)
++#define isl_ast_build_set_options (*isl_pointers__.p_isl_ast_build_set_options)
++#define isl_ast_expr_free (*isl_pointers__.p_isl_ast_expr_free)
++#define isl_ast_expr_from_val (*isl_pointers__.p_isl_ast_expr_from_val)
++#define isl_ast_expr_get_ctx (*isl_pointers__.p_isl_ast_expr_get_ctx)
++#define isl_ast_expr_get_id (*isl_pointers__.p_isl_ast_expr_get_id)
++#define isl_ast_expr_get_op_arg (*isl_pointers__.p_isl_ast_expr_get_op_arg)
++#define isl_ast_expr_get_op_n_arg (*isl_pointers__.p_isl_ast_expr_get_op_n_arg)
++#define isl_ast_expr_get_op_type (*isl_pointers__.p_isl_ast_expr_get_op_type)
++#define isl_ast_expr_get_type (*isl_pointers__.p_isl_ast_expr_get_type)
++#define isl_ast_expr_get_val (*isl_pointers__.p_isl_ast_expr_get_val)
++#define isl_ast_expr_sub (*isl_pointers__.p_isl_ast_expr_sub)
++#define isl_ast_node_block_get_children (*isl_pointers__.p_isl_ast_node_block_get_children)
++#define isl_ast_node_for_get_body (*isl_pointers__.p_isl_ast_node_for_get_body)
++#define isl_ast_node_for_get_cond (*isl_pointers__.p_isl_ast_node_for_get_cond)
++#define isl_ast_node_for_get_inc (*isl_pointers__.p_isl_ast_node_for_get_inc)
++#define isl_ast_node_for_get_init (*isl_pointers__.p_isl_ast_node_for_get_init)
++#define isl_ast_node_for_get_iterator (*isl_pointers__.p_isl_ast_node_for_get_iterator)
++#define isl_ast_node_free (*isl_pointers__.p_isl_ast_node_free)
++#define isl_ast_node_get_annotation (*isl_pointers__.p_isl_ast_node_get_annotation)
++#define isl_ast_node_get_type (*isl_pointers__.p_isl_ast_node_get_type)
++#define isl_ast_node_if_get_cond (*isl_pointers__.p_isl_ast_node_if_get_cond)
++#define isl_ast_node_if_get_else (*isl_pointers__.p_isl_ast_node_if_get_else)
++#define isl_ast_node_if_get_then (*isl_pointers__.p_isl_ast_node_if_get_then)
++#define isl_ast_node_list_free (*isl_pointers__.p_isl_ast_node_list_free)
++#define isl_ast_node_list_get_ast_node (*isl_pointers__.p_isl_ast_node_list_get_ast_node)
++#define isl_ast_node_list_n_ast_node (*isl_pointers__.p_isl_ast_node_list_n_ast_node)
++#define isl_ast_node_user_get_expr (*isl_pointers__.p_isl_ast_node_user_get_expr)
++#define isl_constraint_set_coefficient_val (*isl_pointers__.p_isl_constraint_set_coefficient_val)
++#define isl_constraint_set_constant_val (*isl_pointers__.p_isl_constraint_set_constant_val)
++#define isl_id_get_user (*isl_pointers__.p_isl_id_get_user)
++#define isl_local_space_get_ctx (*isl_pointers__.p_isl_local_space_get_ctx)
++#define isl_map_fix_val (*isl_pointers__.p_isl_map_fix_val)
++#define isl_options_set_ast_build_atomic_upper_bound (*isl_pointers__.p_isl_options_set_ast_build_atomic_upper_bound)
++#define isl_printer_print_ast_node (*isl_pointers__.p_isl_printer_print_ast_node)
++#define isl_printer_print_str (*isl_pointers__.p_isl_printer_print_str)
++#define isl_printer_set_output_format (*isl_pointers__.p_isl_printer_set_output_format)
++#define isl_pw_aff_mod_val (*isl_pointers__.p_isl_pw_aff_mod_val)
++#define isl_schedule_constraints_compute_schedule (*isl_pointers__.p_isl_schedule_constraints_compute_schedule)
++#define isl_schedule_constraints_on_domain (*isl_pointers__.p_isl_schedule_constraints_on_domain)
++#define isl_schedule_constraints_set_coincidence (*isl_pointers__.p_isl_schedule_constraints_set_coincidence)
++#define isl_schedule_constraints_set_proximity (*isl_pointers__.p_isl_schedule_constraints_set_proximity)
++#define isl_schedule_constraints_set_validity (*isl_pointers__.p_isl_schedule_constraints_set_validity)
++#define isl_set_get_dim_id (*isl_pointers__.p_isl_set_get_dim_id)
++#define isl_set_max_val (*isl_pointers__.p_isl_set_max_val)
++#define isl_set_min_val (*isl_pointers__.p_isl_set_min_val)
++#define isl_set_params (*isl_pointers__.p_isl_set_params)
++#define isl_space_align_params (*isl_pointers__.p_isl_space_align_params)
++#define isl_space_map_from_domain_and_range (*isl_pointers__.p_isl_space_map_from_domain_and_range)
++#define isl_space_set_tuple_name (*isl_pointers__.p_isl_space_set_tuple_name)
++#define isl_space_wrap (*isl_pointers__.p_isl_space_wrap)
++#define isl_union_map_from_domain_and_range (*isl_pointers__.p_isl_union_map_from_domain_and_range)
++#define isl_union_map_range (*isl_pointers__.p_isl_union_map_range)
++#define isl_union_set_union (*isl_pointers__.p_isl_union_set_union)
++#define isl_union_set_universe (*isl_pointers__.p_isl_union_set_universe)
++#define isl_val_2exp (*isl_pointers__.p_isl_val_2exp)
++#define isl_val_add_ui (*isl_pointers__.p_isl_val_add_ui)
++#define isl_val_copy (*isl_pointers__.p_isl_val_copy)
++#define isl_val_free (*isl_pointers__.p_isl_val_free)
++#define isl_val_int_from_si (*isl_pointers__.p_isl_val_int_from_si)
++#define isl_val_int_from_ui (*isl_pointers__.p_isl_val_int_from_ui)
++#define isl_val_mul (*isl_pointers__.p_isl_val_mul)
++#define isl_val_neg (*isl_pointers__.p_isl_val_neg)
++#define isl_val_sub (*isl_pointers__.p_isl_val_sub)
++#define isl_printer_print_union_map (*isl_pointers__.p_isl_printer_print_union_map)
++#define isl_pw_aff_get_ctx (*isl_pointers__.p_isl_pw_aff_get_ctx)
++#define isl_val_is_int (*isl_pointers__.p_isl_val_is_int)
++#define isl_ctx_get_max_operations (*isl_pointers__.p_isl_ctx_get_max_operations)
++#define isl_ctx_set_max_operations (*isl_pointers__.p_isl_ctx_set_max_operations)
++#define isl_ctx_last_error (*isl_pointers__.p_isl_ctx_last_error)
++#define isl_ctx_reset_operations (*isl_pointers__.p_isl_ctx_reset_operations)
++#define isl_map_coalesce (*isl_pointers__.p_isl_map_coalesce)
++#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule)
++#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id)
++#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce)
++#define isl_multi_val_set_val (*isl_pointers__.p_isl_multi_val_set_val)
++#define isl_multi_val_zero (*isl_pointers__.p_isl_multi_val_zero)
++#define isl_options_set_schedule_max_coefficient (*isl_pointers__.p_isl_options_set_schedule_max_coefficient)
++#define isl_options_set_tile_scale_tile_loops (*isl_pointers__.p_isl_options_set_tile_scale_tile_loops)
++#define isl_schedule_copy (*isl_pointers__.p_isl_schedule_copy)
++#define isl_schedule_get_map (*isl_pointers__.p_isl_schedule_get_map)
++#define isl_schedule_map_schedule_node_bottom_up (*isl_pointers__.p_isl_schedule_map_schedule_node_bottom_up)
++#define isl_schedule_node_band_get_permutable (*isl_pointers__.p_isl_schedule_node_band_get_permutable)
++#define isl_schedule_node_band_get_space (*isl_pointers__.p_isl_schedule_node_band_get_space)
++#define isl_schedule_node_band_tile (*isl_pointers__.p_isl_schedule_node_band_tile)
++#define isl_schedule_node_child (*isl_pointers__.p_isl_schedule_node_child)
++#define isl_schedule_node_free (*isl_pointers__.p_isl_schedule_node_free)
++#define isl_schedule_node_get_child (*isl_pointers__.p_isl_schedule_node_get_child)
++#define isl_schedule_node_get_ctx (*isl_pointers__.p_isl_schedule_node_get_ctx)
++#define isl_schedule_node_get_type (*isl_pointers__.p_isl_schedule_node_get_type)
++#define isl_schedule_node_n_children (*isl_pointers__.p_isl_schedule_node_n_children)
++#define isl_union_map_is_equal (*isl_pointers__.p_isl_union_map_is_equal)
++#define isl_union_access_info_compute_flow (*isl_pointers__.p_isl_union_access_info_compute_flow)
++#define isl_union_access_info_from_sink (*isl_pointers__.p_isl_union_access_info_from_sink)
++#define isl_union_access_info_set_may_source (*isl_pointers__.p_isl_union_access_info_set_may_source)
++#define isl_union_access_info_set_must_source (*isl_pointers__.p_isl_union_access_info_set_must_source)
++#define isl_union_access_info_set_schedule (*isl_pointers__.p_isl_union_access_info_set_schedule)
++#define isl_union_flow_free (*isl_pointers__.p_isl_union_flow_free)
++#define isl_union_flow_get_may_dependence (*isl_pointers__.p_isl_union_flow_get_may_dependence)
++#define isl_union_flow_get_must_dependence (*isl_pointers__.p_isl_union_flow_get_must_dependence)
++#define isl_aff_var_on_domain (*isl_pointers__.p_isl_aff_var_on_domain)
++#define isl_multi_aff_from_aff (*isl_pointers__.p_isl_multi_aff_from_aff)
++#define isl_schedule_get_ctx (*isl_pointers__.p_isl_schedule_get_ctx)
++#define isl_multi_aff_set_tuple_id (*isl_pointers__.p_isl_multi_aff_set_tuple_id)
++#define isl_multi_aff_dim (*isl_pointers__.p_isl_multi_aff_dim)
++#define isl_schedule_get_domain (*isl_pointers__.p_isl_schedule_get_domain)
++#define isl_union_set_is_empty (*isl_pointers__.p_isl_union_set_is_empty)
++#define isl_union_set_get_space (*isl_pointers__.p_isl_union_set_get_space)
++#define isl_union_pw_multi_aff_empty (*isl_pointers__.p_isl_union_pw_multi_aff_empty)
++#define isl_union_set_foreach_set (*isl_pointers__.p_isl_union_set_foreach_set)
++#define isl_union_set_free (*isl_pointers__.p_isl_union_set_free)
++#define isl_multi_union_pw_aff_from_union_pw_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_from_union_pw_multi_aff)
++#define isl_multi_union_pw_aff_apply_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_apply_multi_aff)
++#define isl_schedule_insert_partial_schedule (*isl_pointers__.p_isl_schedule_insert_partial_schedule)
++#define isl_union_pw_multi_aff_free (*isl_pointers__.p_isl_union_pw_multi_aff_free)
++#define isl_pw_multi_aff_project_out_map (*isl_pointers__.p_isl_pw_multi_aff_project_out_map)
++#define isl_union_pw_multi_aff_add_pw_multi_aff (*isl_pointers__.p_isl_union_pw_multi_aff_add_pw_multi_aff)
++#define isl_schedule_from_domain (*isl_pointers__.p_isl_schedule_from_domain)
++#define isl_schedule_sequence (*isl_pointers__.p_isl_schedule_sequence)
++#define isl_ast_build_node_from_schedule (*isl_pointers__.p_isl_ast_build_node_from_schedule)
++#define isl_ast_node_mark_get_node (*isl_pointers__.p_isl_ast_node_mark_get_node)
++#define isl_schedule_node_band_member_get_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_get_ast_loop_type)
++#define isl_schedule_node_band_member_set_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_set_ast_loop_type)
++#define isl_val_n_abs_num_chunks (*isl_pointers__.p_isl_val_n_abs_num_chunks)
++#define isl_val_get_abs_num_chunks (*isl_pointers__.p_isl_val_get_abs_num_chunks)
++#define isl_val_int_from_chunks (*isl_pointers__.p_isl_val_int_from_chunks)
++#define isl_val_is_neg (*isl_pointers__.p_isl_val_is_neg)
++#define isl_version (*isl_pointers__.p_isl_version)
++#define isl_options_get_on_error (*isl_pointers__.p_isl_options_get_on_error)
++#define isl_ctx_reset_error (*isl_pointers__.p_isl_ctx_reset_error)
++
+ typedef struct poly_dr *poly_dr_p;
+
+ typedef struct poly_bb *poly_bb_p;
+@@ -448,5 +1033,6 @@ extern tree cached_scalar_evolution_in_r
+ extern void dot_all_sese (FILE *, vec &);
+ extern void dot_sese (sese_l &);
+ extern void dot_cfg ();
++extern const char *get_isl_version (bool);
+
+ #endif
+--- gcc/graphite.cc.jj 2015-11-04 14:15:32.000000000 +0100
++++ gcc/graphite.cc 2015-11-04 14:56:02.645536409 +0100
+@@ -60,6 +60,35 @@ along with GCC; see the file COPYING3.
+ #include "tree-ssa-propagate.h"
+ #include "graphite.h"
+
++__typeof (isl_pointers__) isl_pointers__;
++
++static bool
++init_isl_pointers (void)
++{
++ void *h;
++
++ if (isl_pointers__.inited)
++ return isl_pointers__.h != NULL;
++ h = dlopen ("libisl.so.23", RTLD_LAZY);
++ isl_pointers__.h = h;
++ if (h == NULL)
++ return false;
++#define DYNSYM(x) \
++ do \
++ { \
++ union { __typeof (isl_pointers__.p_##x) p; void *q; } u; \
++ u.q = dlsym (h, #x); \
++ if (u.q == NULL) \
++ return false; \
++ isl_pointers__.p_##x = u.p; \
++ } \
++ while (0)
++ DYNSYMS
++#undef DYNSYM
++ isl_pointers__.inited = true;
++ return true;
++}
++
+ /* Print global statistics to FILE. */
+
+ static void
+@@ -424,6 +453,15 @@ graphite_transform_loops (void)
+ if (parallelized_function_p (cfun->decl))
+ return;
+
++ if (number_of_loops (cfun) <= 1)
++ return;
++
++ if (!init_isl_pointers ())
++ {
++ sorry ("Graphite loop optimizations cannot be used");
++ return;
++ }
++
+ calculate_dominance_info (CDI_DOMINATORS);
+
+ /* We rely on post-dominators during merging of SESE regions so those
+@@ -519,6 +557,14 @@ graphite_transform_loops (void)
+ }
+ }
+
++const char *
++get_isl_version (bool force)
++{
++ if (force)
++ init_isl_pointers ();
++ return (isl_pointers__.inited && isl_version) ? isl_version () : "none";
++}
++
+ #else /* If isl is not available: #ifndef HAVE_isl. */
+
+ static void
+--- gcc/toplev.cc.jj 2017-02-19 13:02:31.000000000 +0100
++++ gcc/toplev.cc 2017-02-19 16:50:25.536301350 +0100
+@@ -94,6 +94,7 @@ along with GCC; see the file COPYING3.
+
+ #ifdef HAVE_isl
+ #include
++extern const char *get_isl_version (bool);
+ #endif
+
+ static void general_init (const char *, bool);
+@@ -683,7 +684,7 @@ print_version (FILE *file, const char *i
+ #ifndef HAVE_isl
+ "none"
+ #else
+- isl_version ()
++ get_isl_version (*indent == 0)
+ #endif
+ );
+ if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version))
diff --git a/gcc13-isl-dl2.patch b/gcc13-isl-dl2.patch
new file mode 100644
index 0000000..2e12499
--- /dev/null
+++ b/gcc13-isl-dl2.patch
@@ -0,0 +1,71 @@
+2011-04-04 Jakub Jelinek
+
+ * toplev.cc (toplev_main_argv): New variable.
+ (toplev_main): Initialize it.
+ * graphite.cc (init_isl_pointers): Load libisl.so.23 from gcc's private
+ directory.
+
+--- gcc/toplev.cc.jj 2008-12-09 23:59:10.000000000 +0100
++++ gcc/toplev.cc 2009-01-27 14:33:52.000000000 +0100
+@@ -113,6 +113,8 @@ static void finalize (bool);
+ static void crash_signal (int) ATTRIBUTE_NORETURN;
+ static void compile_file (void);
+
++const char **toplev_main_argv;
++
+ /* Decoded options, and number of such options. */
+ struct cl_decoded_option *save_decoded_options;
+ unsigned int save_decoded_options_count;
+@@ -2239,6 +2241,8 @@ toplev::main (int argc, char **argv)
+
+ expandargv (&argc, &argv);
+
++ toplev_main_argv = CONST_CAST2 (const char **, char **, argv);
++
+ /* Initialization of GCC's environment, and diagnostics. */
+ general_init (argv[0], m_init_signals);
+
+--- gcc/graphite.cc.jj 2010-12-01 10:24:32.000000000 -0500
++++ gcc/graphite.cc 2010-12-01 11:46:07.832118193 -0500
+@@ -64,11 +64,39 @@ __typeof (isl_pointers__) isl_pointers__
+ static bool
+ init_isl_pointers (void)
+ {
+- void *h;
++ void *h = NULL;
++ extern const char **toplev_main_argv;
++ char *buf, *p;
++ size_t len;
+
+ if (isl_pointers__.inited)
+ return isl_pointers__.h != NULL;
+- h = dlopen ("libisl.so.23", RTLD_LAZY);
++ len = progname - toplev_main_argv[0];
++ buf = XALLOCAVAR (char, len + sizeof "libisl.so.23");
++ memcpy (buf, toplev_main_argv[0], len);
++ strcpy (buf + len, "libisl.so.23");
++ len += sizeof "libisl.so.23";
++ p = strstr (buf, "/libexec/");
++ if (p != NULL)
++ {
++ while (1)
++ {
++ char *q = strstr (p + 8, "/libexec/");
++ if (q == NULL)
++ break;
++ p = q;
++ }
++ memmove (p + 4, p + 8, len - (p + 8 - buf));
++ h = dlopen (buf, RTLD_LAZY);
++ if (h == NULL)
++ {
++ len = progname - toplev_main_argv[0];
++ memcpy (buf, toplev_main_argv[0], len);
++ strcpy (buf + len, "libisl.so.23");
++ }
++ }
++ if (h == NULL)
++ h = dlopen (buf, RTLD_LAZY);
+ isl_pointers__.h = h;
+ if (h == NULL)
+ return false;
diff --git a/gcc13-libgomp-omp_h-multilib.patch b/gcc13-libgomp-omp_h-multilib.patch
new file mode 100644
index 0000000..d0e98d1
--- /dev/null
+++ b/gcc13-libgomp-omp_h-multilib.patch
@@ -0,0 +1,17 @@
+2008-06-09 Jakub Jelinek
+
+ * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs.
+
+--- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200
++++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200
+@@ -42,8 +42,8 @@ typedef struct
+
+ typedef struct
+ {
+- unsigned char _x[@OMP_NEST_LOCK_SIZE@]
+- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@)));
++ unsigned char _x[8 + sizeof (void *)]
++ __attribute__((__aligned__(sizeof (void *))));
+ } omp_nest_lock_t;
+ #endif
+
diff --git a/gcc13-libstdc++-docs.patch b/gcc13-libstdc++-docs.patch
new file mode 100644
index 0000000..b6c2d50
--- /dev/null
+++ b/gcc13-libstdc++-docs.patch
@@ -0,0 +1,24 @@
+--- libstdc++-v3/doc/html/index.html.jj 2011-01-03 12:53:21.282829010 +0100
++++ libstdc++-v3/doc/html/index.html 2011-01-04 18:06:28.999851145 +0100
+@@ -5,6 +5,8 @@
+ FSF
+
+
++ Release 12.2.1
++
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation
+ License, Version 1.2 or any later version published by the
+--- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100
++++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100
+@@ -20,7 +20,9 @@
+ member functions for the library classes, finding out what is in a
+ particular include file, looking at inheritance diagrams, etc.
+
+- The API documentation, rendered into HTML, can be viewed online
++ The API documentation, rendered into HTML, can be viewed locally
++ for the 12.2.1 release,
++ online
+ for each GCC release
+ and
+
diff --git a/gcc13-libtool-no-rpath.patch b/gcc13-libtool-no-rpath.patch
new file mode 100644
index 0000000..466c661
--- /dev/null
+++ b/gcc13-libtool-no-rpath.patch
@@ -0,0 +1,27 @@
+libtool sucks.
+--- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100
++++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200
+@@ -5394,6 +5394,7 @@ EOF
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+@@ -6071,6 +6072,7 @@ EOF
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+@@ -6120,6 +6122,7 @@ EOF
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
diff --git a/gcc13-no-add-needed.patch b/gcc13-no-add-needed.patch
new file mode 100644
index 0000000..5817299
--- /dev/null
+++ b/gcc13-no-add-needed.patch
@@ -0,0 +1,37 @@
+2010-02-08 Roland McGrath
+
+ * config/gnu-user.h (LINK_EH_SPEC): Pass --no-add-needed to the linker.
+ * config/alpha/elf.h (LINK_EH_SPEC): Likewise.
+ * config/ia64/linux.h (LINK_EH_SPEC): Likewise.
+
+--- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100
++++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100
+@@ -168,5 +168,5 @@ extern int alpha_this_gpdisp_sequence_nu
+ I imagine that other systems will catch up. In the meantime, it
+ doesn't harm to make sure that the data exists to be used later. */
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
+ #endif
+--- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100
++++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100
+@@ -76,7 +76,7 @@ do { \
+ Signalize that because we have fde-glibc, we don't need all C shared libs
+ linked against -lgcc_s. */
+ #undef LINK_EH_SPEC
+-#define LINK_EH_SPEC ""
++#define LINK_EH_SPEC "--no-add-needed "
+
+ #undef TARGET_INIT_LIBFUNCS
+ #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs
+--- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100
++++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100
+@@ -106,7 +106,7 @@ see the files COPYING3 and COPYING.RUNTI
+ #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
+
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} "
+ #endif
+
+ #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \
diff --git a/gcc13-pr107608.patch b/gcc13-pr107608.patch
new file mode 100644
index 0000000..305b260
--- /dev/null
+++ b/gcc13-pr107608.patch
@@ -0,0 +1,47 @@
+2023-01-15 Aldy Hernandez
+
+ PR tree-optimization/107608
+ * range-op-float.cc (range_operator_float::fold_range): Avoid
+ folding into INF when flag_trapping_math.
+ * value-range.h (frange::known_isinf): Return false for possible NANs.
+
+--- gcc/range-op-float.cc
++++ gcc/range-op-float.cc
+@@ -91,6 +91,27 @@ range_operator_float::fold_range (frange &r, tree type,
+ else
+ r.clear_nan ();
+
++ // If the result has overflowed and flag_trapping_math, folding this
++ // operation could elide an overflow or division by zero exception.
++ // Avoid returning a singleton +-INF, to keep the propagators (DOM
++ // and substitute_and_fold_engine) from folding. See PR107608.
++ if (flag_trapping_math
++ && MODE_HAS_INFINITIES (TYPE_MODE (type))
++ && r.known_isinf () && !op1.known_isinf () && !op2.known_isinf ())
++ {
++ REAL_VALUE_TYPE inf = r.lower_bound ();
++ if (real_isneg (&inf))
++ {
++ REAL_VALUE_TYPE min = real_min_representable (type);
++ r.set (type, inf, min);
++ }
++ else
++ {
++ REAL_VALUE_TYPE max = real_max_representable (type);
++ r.set (type, max, inf);
++ }
++ }
++
+ return true;
+ }
+
+--- gcc/value-range.h
++++ gcc/value-range.h
+@@ -1300,6 +1300,7 @@ inline bool
+ frange::known_isinf () const
+ {
+ return (m_kind == VR_RANGE
++ && !maybe_isnan ()
+ && real_identical (&m_min, &m_max)
+ && real_isinf (&m_min));
+ }
diff --git a/gcc13-pr107678.patch b/gcc13-pr107678.patch
new file mode 100644
index 0000000..3cf29ac
--- /dev/null
+++ b/gcc13-pr107678.patch
@@ -0,0 +1,113 @@
+A recent change only initializes the regs.how[] during Dwarf unwinding
+which resulted in an uninitialized offset used in return address signing
+and random failures during unwinding. The fix is to encode the return
+address signing state in REG_UNSAVED and REG_UNDEFINED.
+
+2023-01-10 Wilco Dijkstra
+
+ PR target/107678
+ * unwind-dw2.c (RA_SIGNED_BIT): Remove.
+ * unwind-dw2-execute_cfa.h: Use REG_UNSAVED/UNDEFINED
+ to encode return address signing state.
+ * config/aarch64/aarch64-unwind.h (aarch64_demangle_return_addr)
+ Check current return address signing state.
+ (aarch64_frob_update_contex): Remove.
+
+--- libgcc/config/aarch64/aarch64-unwind.h
++++ libgcc/config/aarch64/aarch64-unwind.h
+@@ -29,8 +29,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+
+ #define MD_DEMANGLE_RETURN_ADDR(context, fs, addr) \
+ aarch64_demangle_return_addr (context, fs, addr)
+-#define MD_FROB_UPDATE_CONTEXT(context, fs) \
+- aarch64_frob_update_context (context, fs)
+
+ static inline int
+ aarch64_cie_signed_with_b_key (struct _Unwind_Context *context)
+@@ -55,42 +53,27 @@ aarch64_cie_signed_with_b_key (struct _Unwind_Context *context)
+
+ static inline void *
+ aarch64_demangle_return_addr (struct _Unwind_Context *context,
+- _Unwind_FrameState *fs ATTRIBUTE_UNUSED,
++ _Unwind_FrameState *fs,
+ _Unwind_Word addr_word)
+ {
+ void *addr = (void *)addr_word;
+- if (context->flags & RA_SIGNED_BIT)
++ const int reg = DWARF_REGNUM_AARCH64_RA_STATE;
++
++ if (fs->regs.how[reg] == REG_UNSAVED)
++ return addr;
++
++ /* Return-address signing state is toggled by DW_CFA_GNU_window_save (where
++ REG_UNDEFINED means enabled), or set by a DW_CFA_expression. */
++ if (fs->regs.how[reg] == REG_UNDEFINED
++ || (_Unwind_GetGR (context, reg) & 0x1) != 0)
+ {
+ _Unwind_Word salt = (_Unwind_Word) context->cfa;
+ if (aarch64_cie_signed_with_b_key (context) != 0)
+ return __builtin_aarch64_autib1716 (addr, salt);
+ return __builtin_aarch64_autia1716 (addr, salt);
+ }
+- else
+- return addr;
+-}
+-
+-/* Do AArch64 private initialization on CONTEXT based on frame info FS. Mark
+- CONTEXT as return address signed if bit 0 of DWARF_REGNUM_AARCH64_RA_STATE is
+- set. */
+-
+-static inline void
+-aarch64_frob_update_context (struct _Unwind_Context *context,
+- _Unwind_FrameState *fs)
+-{
+- const int reg = DWARF_REGNUM_AARCH64_RA_STATE;
+- int ra_signed;
+- if (fs->regs.how[reg] == REG_UNSAVED)
+- ra_signed = fs->regs.reg[reg].loc.offset & 0x1;
+- else
+- ra_signed = _Unwind_GetGR (context, reg) & 0x1;
+- if (ra_signed)
+- /* The flag is used for re-authenticating EH handler's address. */
+- context->flags |= RA_SIGNED_BIT;
+- else
+- context->flags &= ~RA_SIGNED_BIT;
+
+- return;
++ return addr;
+ }
+
+ #endif /* defined AARCH64_UNWIND_H && defined __ILP32__ */
+--- libgcc/unwind-dw2.c
++++ libgcc/unwind-dw2.c
+@@ -137,9 +137,6 @@ struct _Unwind_Context
+ #define SIGNAL_FRAME_BIT ((~(_Unwind_Word) 0 >> 1) + 1)
+ /* Context which has version/args_size/by_value fields. */
+ #define EXTENDED_CONTEXT_BIT ((~(_Unwind_Word) 0 >> 2) + 1)
+- /* Bit reserved on AArch64, return address has been signed with A or B
+- key. */
+-#define RA_SIGNED_BIT ((~(_Unwind_Word) 0 >> 3) + 1)
+ _Unwind_Word flags;
+ /* 0 for now, can be increased when further fields are added to
+ struct _Unwind_Context. */
+--- libgcc/unwind-dw2-execute_cfa.h 2023-01-02 17:53:56.003021412 +0100
++++ libgcc/unwind-dw2-execute_cfa.h 2023-01-12 19:52:05.456327742 +0100
+@@ -278,10 +278,15 @@
+ case DW_CFA_GNU_window_save:
+ #if defined (__aarch64__) && !defined (__ILP32__)
+ /* This CFA is multiplexed with Sparc. On AArch64 it's used to toggle
+- return address signing status. */
++ return address signing status. The REG_UNDEFINED/UNSAVED states
++ mean RA signing is enabled/disabled. */
+ reg = DWARF_REGNUM_AARCH64_RA_STATE;
+- gcc_assert (fs->regs.how[reg] == REG_UNSAVED);
+- fs->regs.reg[reg].loc.offset ^= 1;
++ gcc_assert (fs->regs.how[reg] == REG_UNSAVED
++ || fs->regs.how[reg] == REG_UNDEFINED);
++ if (fs->regs.how[reg] == REG_UNSAVED)
++ fs->regs.how[reg] = REG_UNDEFINED;
++ else
++ fs->regs.how[reg] = REG_UNSAVED;
+ #else
+ /* ??? Hardcoded for SPARC register window configuration. */
+ if (__LIBGCC_DWARF_FRAME_REGISTERS__ >= 32)
diff --git a/gcc13-pr108411.patch b/gcc13-pr108411.patch
new file mode 100644
index 0000000..2c51481
--- /dev/null
+++ b/gcc13-pr108411.patch
@@ -0,0 +1,14 @@
+PR108411 workaround
+
+--- gcc/config/aarch64/aarch64.cc 2023-01-15 13:20:00.569241815 +0100
++++ gcc/config/aarch64/aarch64.cc 2023-01-15 13:30:05.061513817 +0100
+@@ -7707,8 +7707,7 @@ aarch64_layout_arg (cumulative_args_t pc
+ unsigned int alignment
+ = aarch64_function_arg_alignment (mode, type, &abi_break,
+ &abi_break_packed);
+- gcc_assert (alignment <= 16 * BITS_PER_UNIT
+- && (!alignment || abi_break < alignment)
++ gcc_assert ((!alignment || abi_break < alignment)
+ && (!abi_break_packed || alignment < abi_break_packed));
+
+ pcum->aapcs_arg_processed = true;
diff --git a/gcc13-rh1574936.patch b/gcc13-rh1574936.patch
new file mode 100644
index 0000000..6b4be0c
--- /dev/null
+++ b/gcc13-rh1574936.patch
@@ -0,0 +1,30 @@
+crt files and statically linked libgcc objects cause false positives
+in annobin coverage, so we add the assembler flag to generate notes
+for them.
+
+The patch also adds notes to libgcc_s.so, but this is harmless because
+these notes only confer that there is no other annobin markup.
+
+2018-07-25 Florian Weimer
+
+ * Makefile.in (LIBGCC2_CFLAGS, CRTSTUFF_CFLAGS): Add
+ -Wa,--generate-missing-build-notes=yes.
+
+--- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100
++++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200
+@@ -246,6 +246,7 @@ LIBGCC2_DEBUG_CFLAGS = -g
+ LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
+ $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \
+ -fbuilding-libgcc -fno-stack-protector \
++ -Wa,--generate-missing-build-notes=yes \
+ $(INHIBIT_LIBC_CFLAGS)
+
+ # Additional options to use when compiling libgcc2.a.
+@@ -301,6 +302,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(IN
+ $(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
+ -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
+ -fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \
++ -Wa,--generate-missing-build-notes=yes \
+ $(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY)
+
+ # Extra flags to use when compiling crt{begin,end}.o.
diff --git a/gcc13-sparc-config-detection.patch b/gcc13-sparc-config-detection.patch
new file mode 100644
index 0000000..bbe8ec3
--- /dev/null
+++ b/gcc13-sparc-config-detection.patch
@@ -0,0 +1,40 @@
+--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500
++++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500
+@@ -3330,7 +3330,7 @@ sparc-*-rtems*)
+ tm_file="${tm_file} elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
+ tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems"
+ ;;
+-sparc-*-linux*)
++sparc-*-linux* | sparcv9-*-linux*)
+ tm_file="${tm_file} elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h"
+ extra_options="${extra_options} sparc/long-double-switch.opt"
+ case ${target} in
+@@ -3384,7 +3384,7 @@ sparc64-*-rtems*)
+ extra_options="${extra_options}"
+ tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64"
+ ;;
+-sparc64-*-linux*)
++sparc64*-*-linux*)
+ tm_file="sparc/biarch64.h ${tm_file} elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default64.h sparc/linux64.h sparc/tso.h"
+ extra_options="${extra_options} sparc/long-double-switch.opt"
+ tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64"
+--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500
++++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500
+@@ -1002,7 +1002,7 @@ sparc-*-elf*)
+ tmake_file="${tmake_file} t-fdpbit t-crtfm"
+ extra_parts="$extra_parts crti.o crtn.o crtfastmath.o"
+ ;;
+-sparc-*-linux*) # SPARC's running GNU/Linux, libc6
++sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6
+ tmake_file="${tmake_file} t-crtfm"
+ if test "${host_address}" = 64; then
+ tmake_file="$tmake_file sparc/t-linux64"
+@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*
+ tmake_file="$tmake_file t-crtfm"
+ extra_parts="$extra_parts crtfastmath.o"
+ ;;
+-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
++sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux
+ extra_parts="$extra_parts crtfastmath.o"
+ tmake_file="${tmake_file} t-crtfm sparc/t-linux"
+ if test "${host_address}" = 64; then
diff --git a/isl-rh2155127.patch b/isl-rh2155127.patch
new file mode 100644
index 0000000..092bddb
--- /dev/null
+++ b/isl-rh2155127.patch
@@ -0,0 +1,85 @@
+From: Sven Verdoolaege
+Date: Mon, 6 Jun 2022 12:56:02 +0000 (+0200)
+Subject: update m4/ax_prog_cc_for_build.m4
+X-Git-Tag: isl-0.25~11
+X-Git-Url: https://repo.or.cz/isl.git/commitdiff_plain/b4dcdfadc29a6c9f410a72f345f3f32725b1d38b
+
+update m4/ax_prog_cc_for_build.m4
+
+In particular, update to the latest version from the autoconf archive,
+but preserve the changes from isl-0.22.1-358-gcd42abdf2
+(m4/ax_prog_cc_for_build.m4: do not override host compiler dependency style,
+Tue Jun 9 10:54:10 2020 +0200).
+
+Signed-off-by: Sven Verdoolaege
+
+--- isl-0.24/m4/ax_prog_cc_for_build.m4.jj 2021-03-02 12:07:09.000000000 +0100
++++ isl-0.24/m4/ax_prog_cc_for_build.m4 2022-12-20 18:11:18.855777817 +0100
+@@ -32,7 +32,7 @@
+ # and this notice are preserved. This file is offered as-is, without any
+ # warranty.
+
+-#serial 18
++#serial 21
+
+ AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD])
+ AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl
+@@ -44,6 +44,8 @@ dnl Use the standard macros, but make th
+ dnl
+ pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl
+ pushdef([ac_cv_prog_cc_c89], ac_cv_build_prog_cc_c89)dnl
++pushdef([ac_cv_prog_cc_c99], ac_cv_build_prog_cc_c99)dnl
++pushdef([ac_cv_prog_cc_c11], ac_cv_build_prog_cc_c11)dnl
+ pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl
+ pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl
+ pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl
+@@ -86,7 +88,21 @@ AS_IF([test -n "$build"], [ac_build
+ [test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"])
+
+ AC_LANG_PUSH([C])
++
++dnl The pushdef([ac_cv_c_compiler_gnu], ...) currently does not cover
++dnl the use of this variable in _AC_LANG_COMPILER_GNU called by
++dnl AC_PROG_CC. Unset this cache variable temporarily as a workaround.
++was_set_c_compiler_gnu=${[ac_cv_c_compiler_gnu]+y}
++AS_IF([test ${was_set_c_compiler_gnu}],
++ [saved_c_compiler_gnu=$[ac_cv_c_compiler_gnu]
++ AS_UNSET([[ac_cv_c_compiler_gnu]])])
++
+ AC_PROG_CC
++
++dnl Restore ac_cv_c_compiler_gnu
++AS_IF([test ${was_set_c_compiler_gnu}],
++ [[ac_cv_c_compiler_gnu]=$[saved_c_compiler_gnu]])
++
+ _AC_COMPILER_EXEEXT
+ _AC_COMPILER_OBJEXT
+ AC_PROG_CPP
+--- isl-0.24/configure.jj 2021-04-26 11:13:19.000000000 +0200
++++ isl-0.24/configure 2022-12-20 18:11:36.882518568 +0100
+@@ -5002,6 +4990,13 @@ ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR
+ ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_build_c_compiler_gnu
+
++
++was_set_c_compiler_gnu=${ac_cv_c_compiler_gnu+y}
++if test ${was_set_c_compiler_gnu}; then :
++ saved_c_compiler_gnu=$ac_cv_c_compiler_gnu
++ { ac_cv_c_compiler_gnu=; unset ac_cv_c_compiler_gnu;}
++fi
++
+ ac_ext=c
+ ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD'
+ ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5'
+@@ -5728,6 +5723,11 @@ else
+ fi
+
+
++
++if test ${was_set_c_compiler_gnu}; then :
++ ac_cv_c_compiler_gnu=$saved_c_compiler_gnu
++fi
++
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
diff --git a/sources b/sources
index 4f41efa..56d6327 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
-SHA512 (gcc-12.2.1-20221121.tar.xz) = 6fef1438e77d8b7e7aeddea6d2d6a82c37d2e93f65ad9007f04206e1a368dd70597cef01188de4ee9bbfe1811a129303ce10b49cb9758a2b44abe4f0312d073a
+SHA512 (gcc-13.0.0-20230115.tar.xz) = f347e7b91a078e37842612be601f28c68249e4300ee122fbcee8a0a8c15171d51507a4913640135cca07e47f979163acdfd1a4b7cd06a21966663986aee95a29
SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95
SHA512 (newlib-cygwin-a8526cb52bedabd4d6ba4b227a5185627f871aa1.tar.xz) = b099246fe4a5d0a372cdaee5da49083df5b2f4440a4e83961600cdf22d37da50c99ce9ae46b769f188a67034ee038cf863260988fc9d594e8e5fb3905a381dec
SHA512 (nvptx-tools-472b6e78b3ba918d727698f79911360b7c808247.tar.xz) = 91690321bf96460c3b3e229199a6f752ed1c27c6933d4345dc7e237dc068f604ad211bb3a0373e14d4f332bee05b6227d6933e14e0b475ffdfea8b511ab735e6
diff --git a/update-gcc.sh b/update-gcc.sh
index d34d6ce..66e94c6 100755
--- a/update-gcc.sh
+++ b/update-gcc.sh
@@ -3,5 +3,5 @@
git clone --depth 1 git://gcc.gnu.org/git/gcc.git gcc-dir.tmp
git --git-dir=gcc-dir.tmp/.git fetch --depth 1 origin $1
d=`date --iso | sed 's/-//g'`
-git --git-dir=gcc-dir.tmp/.git archive --prefix=gcc-12.2.1-$d/ $1 | xz -9e > gcc-12.2.1-$d.tar.xz
+git --git-dir=gcc-dir.tmp/.git archive --prefix=gcc-13.0.0-$d/ $1 | xz -9e > gcc-13.0.0-$d.tar.xz
rm -rf gcc-dir.tmp