public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/gcc] rhel-f41-base: 13.0.0-0.9
@ 2026-06-29 12:29 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2026-06-29 12:29 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : f05a075009e7f535d16779ffe2c53ff1f952cd6b
Author : Jakub Jelinek <jakub@redhat.com>
Date   : 2023-01-15T13:51:18+01:00
Stats  : +3222/-3299 in 38 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/f05a075009e7f535d16779ffe2c53ff1f952cd6b?branch=rhel-f41-base

Log:
13.0.0-0.9

---
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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <klember@redhat.com> 12.2.1-2
-- enable GDC on aarch64
-
-* Fri Aug 19 2022 Jakub Jelinek <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 12.1.1-3
-- fix up libtsan on s390x
-
-* Tue Jun 28 2022 Jakub Jelinek <jakub@redhat.com> 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 <jakub@redhat.com> 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 <sgallagh@redhat.com> 12.0.1-0.18
-- fix annobin plugin conditional to build for ELN
-
-* Fri Apr 29 2022 Jakub Jelinek <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 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 <jakub@redhat.com> 12.0.0-0.3
+* Sun Jan 15 2023 Jakub Jelinek <jakub@redhat.com> 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  <jakub@redhat.com>
-
-	* Makefile.tpl (GOCFLAGS, GDCFLAGS): Filter out -Wformat-security.
-	* Makefile.in: Regenerated.
-
-2017-02-25  Jakub Jelinek  <jakub@redhat.com>
-
-	* 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  <jakub@redhat.com>
-
-	* 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 <markeggleston@gcc.gnu.org>
-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 <jim.macarthur@codethink.co.uk>
-Addition of -fdec-duplicates by Mark Eggleston <mark.eggleston@codethink.com>
----
- 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 <mark.eggleston@codethink.com>
-+!
-+
-+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 <mark.eggleston@codethink.com>
-+!
-+
-+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 <mark.eggleston@codethink.com>
-+!
-+
-+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 <mark.eggleston@codethink.com>
-+!
-+
-+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 <mark.eggleston@codethink.com>
-+!
-+
-+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 <markeggleston@gcc.gnu.org>
-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 <francisco.marchema@codethink.co.uk>
-+!             and Jeff Law <law@redhat.com>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+        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 <francisco.marchema@codethink.co.uk>
-+!             and Jeff Law <law@redhat.com>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+        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 <francisco.marchema@codethink.co.uk>
-+!             and Jeff Law <law@redhat.com>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+        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 <francisco.marchema@codethink.co.uk>
-+!             and Jeff Law <law@redhat.com>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+       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 <francisco.marchema@codethink.co.uk>
-+!             and Jeff Law <law@redhat.com>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+       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 <francisco.marchema@codethink.co.uk>
-+!             and Jeff Law <law@redhat.com>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+       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 <markeggleston@gcc.gnu.org>
-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 <mark.eggleston@codethink.com>
-
-Now rejects invalid kind parameters and prints error messages:
-
-      INTEGER X*3
-
-caused an internal compiler error.
-
-Contributed by Mark Eggleston <mark.eggleston@codethink.com>
----
- 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 <jim.macarthur@codethink.co.uk>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+       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 <jim.macarthur@codethink.co.uk>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+        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 <jim.macarthur@codethink.co.uk>
-+! Modified by Mark Eggleston <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+        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 <markeggleston@gcc.gnu.org>
-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 <jim.macarthur@codethink.co.uk>
-+! Modified for -flogical-as-integer by Mark Eggleston
-+! <mark.eggleston@codethink.com>
-+!
-+        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 <mark.eggleston@codethink.com>
-+!
-+!
-+        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))
- #\f
- # 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 <isl/version.h>
-+#include <dlfcn.h>
-+
-+#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<sese_l> &);
- 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 <isl/version.h>
-+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  <jakub@redhat.com>
-
-	* 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  <jakub@redhat.com>
-
-	* 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 @@
-       <a class="link" href="https://www.fsf.org" target="_top">FSF
-       </a>
-     </p><p>
-+      Release 12.2.1
-+    </p><p>
-       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.
- </p><p>
--  The API documentation, rendered into HTML, can be viewed online
-+  The API documentation, rendered into HTML, can be viewed locally
-+  <a class="link" href="api/index.html" target="_top">for the 12.2.1 release</a>,
-+  online
-   <a class="link" href="http://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
-   and
-   <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">

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  <roland@redhat.com>
-
-	* 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  <jakub@redhat.com>
-
-	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 <cfenv>
-+  //  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<float>::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<float>::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<typename T>
-@@ -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<T>::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format<T>::max_exponent_fast_path() && pns.mantissa <=binary_format<T>::max_mantissa_fast_path() && !pns.too_many_digits) {
-+  if (binary_format<T>::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format<T>::max_exponent_fast_path() && pns.mantissa <=binary_format<T>::max_mantissa_fast_path() && !pns.too_many_digits && detail::rounds_to_nearest()) {
-     value = T(pns.mantissa);
-     if (pns.exponent < 0) { value = value / binary_format<T>::exact_power_of_ten(-pns.exponent); }
-     else { value = value * binary_format<T>::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
-+// <http://www.gnu.org/licenses/>.
-+
-+// { dg-do run { target c++17 } }
-+// { dg-add-options ieee }
-+
-+#include <charconv>
-+#include <string>
-+#include <cfenv>
-+#include <testsuite_hooks.h>
-+
-+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  <fweimer@redhat.com>
-
-	* 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  <jakub@redhat.com>
+
+	* Makefile.tpl (GOCFLAGS, GDCFLAGS): Filter out -Wformat-security.
+	* Makefile.in: Regenerated.
+
+2017-02-25  Jakub Jelinek  <jakub@redhat.com>
+
+	* 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  <jakub@redhat.com>
+
+	* 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 <markeggleston@gcc.gnu.org>
+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 <jim.macarthur@codethink.co.uk>
+Addition of -fdec-duplicates by Mark Eggleston <mark.eggleston@codethink.com>
+---
+ 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 <mark.eggleston@codethink.com>
++!
++
++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 <mark.eggleston@codethink.com>
++!
++
++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 <mark.eggleston@codethink.com>
++!
++
++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 <mark.eggleston@codethink.com>
++!
++
++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 <mark.eggleston@codethink.com>
++!
++
++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 <markeggleston@gcc.gnu.org>
+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 <francisco.marchema@codethink.co.uk>
++!             and Jeff Law <law@redhat.com>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++        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 <francisco.marchema@codethink.co.uk>
++!             and Jeff Law <law@redhat.com>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++        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 <francisco.marchema@codethink.co.uk>
++!             and Jeff Law <law@redhat.com>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++        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 <francisco.marchema@codethink.co.uk>
++!             and Jeff Law <law@redhat.com>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++       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 <francisco.marchema@codethink.co.uk>
++!             and Jeff Law <law@redhat.com>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++       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 <francisco.marchema@codethink.co.uk>
++!             and Jeff Law <law@redhat.com>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++       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 <markeggleston@gcc.gnu.org>
+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 <mark.eggleston@codethink.com>
+
+Now rejects invalid kind parameters and prints error messages:
+
+      INTEGER X*3
+
+caused an internal compiler error.
+
+Contributed by Mark Eggleston <mark.eggleston@codethink.com>
+---
+ 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 <jim.macarthur@codethink.co.uk>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++       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 <jim.macarthur@codethink.co.uk>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++        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 <jim.macarthur@codethink.co.uk>
++! Modified by Mark Eggleston <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++        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 <markeggleston@gcc.gnu.org>
+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 <jim.macarthur@codethink.co.uk>
++! Modified for -flogical-as-integer by Mark Eggleston
++! <mark.eggleston@codethink.com>
++!
++        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 <mark.eggleston@codethink.com>
++!
++!
++        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))
+ #\f
+ # 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 <isl/version.h>
++#include <dlfcn.h>
++
++#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<sese_l> &);
+ 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 <isl/version.h>
++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  <jakub@redhat.com>
+
+	* 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  <jakub@redhat.com>
+
+	* 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 @@
+       <a class="link" href="https://www.fsf.org" target="_top">FSF
+       </a>
+     </p><p>
++      Release 12.2.1
++    </p><p>
+       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.
+ </p><p>
+-  The API documentation, rendered into HTML, can be viewed online
++  The API documentation, rendered into HTML, can be viewed locally
++  <a class="link" href="api/index.html" target="_top">for the 12.2.1 release</a>,
++  online
+   <a class="link" href="http://gcc.gnu.org/onlinedocs/" target="_top">for each GCC release</a>
+   and
+   <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html" target="_top">

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  <roland@redhat.com>
+
+	* 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  <aldyh@redhat.com>
+
+	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  <Wilco.Dijkstra@arm.com>
+
+	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  <fweimer@redhat.com>
+
+	* 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 <sven.verdoolaege@gmail.com>
+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 <sven.verdoolaege@gmail.com>
+
+--- 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

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [rpms/gcc] rhel-f41-base: 13.0.0-0.9
@ 2026-06-29 12:29 Jakub Jelinek
  0 siblings, 0 replies; 2+ messages in thread
From: Jakub Jelinek @ 2026-06-29 12:29 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : dd925156932d4af9b7ad5358ddf640b79191b69d
Author : Jakub Jelinek <jakub@redhat.com>
Date   : 2023-01-15T13:52:46+01:00
Stats  : +5/-0 in 1 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/dd925156932d4af9b7ad5358ddf640b79191b69d?branch=rhel-f41-base

Log:
13.0.0-0.9

---
diff --git a/.gitignore b/.gitignore
index a02dee0..4d59191 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,3 +80,8 @@
 /newlib-cygwin-a8526cb52bedabd4d6ba4b227a5185627f871aa1.tar.xz
 /nvptx-tools-472b6e78b3ba918d727698f79911360b7c808247.tar.xz
 /gcc-12.2.1-20221121.tar.xz
+/gcc-13.0.0-20221219.tar.xz
+/gcc-13.0.0-20230102.tar.xz
+/gcc-13.0.0-20230106.tar.xz
+/gcc-13.0.0-20230112.tar.xz
+/gcc-13.0.0-20230115.tar.xz

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-06-29 12:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-29 12:29 [rpms/gcc] rhel-f41-base: 13.0.0-0.9 Jakub Jelinek
2026-06-29 12:29 Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox