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

-+ Release 12.2.1 -+

- Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation - License, Version 1.2 or any later version published by the ---- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100 -+++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100 -@@ -20,7 +20,9 @@ - member functions for the library classes, finding out what is in a - particular include file, looking at inheritance diagrams, etc. -

-- The API documentation, rendered into HTML, can be viewed online -+ The API documentation, rendered into HTML, can be viewed locally -+ for the 12.2.1 release, -+ online - for each GCC release - and - diff --git a/gcc12-libtool-no-rpath.patch b/gcc12-libtool-no-rpath.patch deleted file mode 100644 index 466c661..0000000 --- a/gcc12-libtool-no-rpath.patch +++ /dev/null @@ -1,27 +0,0 @@ -libtool sucks. ---- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100 -+++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200 -@@ -5394,6 +5394,7 @@ EOF - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then -@@ -6071,6 +6072,7 @@ EOF - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then -@@ -6120,6 +6122,7 @@ EOF - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then diff --git a/gcc12-no-add-needed.patch b/gcc12-no-add-needed.patch deleted file mode 100644 index 5817299..0000000 --- a/gcc12-no-add-needed.patch +++ /dev/null @@ -1,37 +0,0 @@ -2010-02-08 Roland McGrath - - * config/gnu-user.h (LINK_EH_SPEC): Pass --no-add-needed to the linker. - * config/alpha/elf.h (LINK_EH_SPEC): Likewise. - * config/ia64/linux.h (LINK_EH_SPEC): Likewise. - ---- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100 -+++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100 -@@ -168,5 +168,5 @@ extern int alpha_this_gpdisp_sequence_nu - I imagine that other systems will catch up. In the meantime, it - doesn't harm to make sure that the data exists to be used later. */ - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " -+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} " - #endif ---- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100 -+++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100 -@@ -76,7 +76,7 @@ do { \ - Signalize that because we have fde-glibc, we don't need all C shared libs - linked against -lgcc_s. */ - #undef LINK_EH_SPEC --#define LINK_EH_SPEC "" -+#define LINK_EH_SPEC "--no-add-needed " - - #undef TARGET_INIT_LIBFUNCS - #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs ---- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100 -+++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100 -@@ -106,7 +106,7 @@ see the files COPYING3 and COPYING.RUNTI - #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC - - #if defined(HAVE_LD_EH_FRAME_HDR) --#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " -+#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} " - #endif - - #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \ diff --git a/gcc12-pr107468.patch b/gcc12-pr107468.patch deleted file mode 100644 index 0949b11..0000000 --- a/gcc12-pr107468.patch +++ /dev/null @@ -1,124 +0,0 @@ -libstdc++: Update from latest fast_float [PR107468] - -The following patch is a cherry-pick from -https://github.com/fastfloat/fast_float/pull/153 -to restrict fast_float Clinger's fast path to when rounding mode -is FE_TONEAREST. -Using std::fegetround showed in benchmarks too slow, so instead -it uses a check with 2 float additions and comparison to verify -if rounding is FE_TONEAREST. - -2022-11-20 Jakub Jelinek - - PR libstdc++/107468 - * src/c++17/fast_float/fast_float.h (detail::rounds_to_nearest): New - function, taken from https://github.com/fastfloat/fast_float/pull/153. - (from_chars_advanced): Only use Clinger's fast path if - detail::rounds_to_nearest(). - * testsuite/20_util/from_chars/pr107468.cc: New test. - ---- libstdc++-v3/src/c++17/fast_float/fast_float.h.jj 2022-04-28 15:56:18.315632888 +0200 -+++ libstdc++-v3/src/c++17/fast_float/fast_float.h 2022-11-20 18:53:49.570830249 +0100 -@@ -2842,6 +2842,48 @@ from_chars_result parse_infnan(const cha - return answer; - } - -+/** -+ * Returns true if the floating-pointing rounding mode is to 'nearest'. -+ * It is the default on most system. This function is meant to be inexpensive. -+ * Credit : @mwalcott3 -+ */ -+fastfloat_really_inline bool rounds_to_nearest() noexcept { -+ // See -+ // A fast function to check your floating-point rounding mode -+ // https://lemire.me/blog/2022/11/16/a-fast-function-to-check-your-floating-point-rounding-mode/ -+ // -+ // This function is meant to be equivalent to : -+ // prior: #include -+ // return fegetround() == FE_TONEAREST; -+ // However, it is expected to be much faster than the fegetround() -+ // function call. -+ // -+ // The volatile keywoard prevents the compiler from computing the function -+ // at compile-time. -+ // There might be other ways to prevent compile-time optimizations (e.g., asm). -+ // The value does not need to be std::numeric_limits::min(), any small -+ // value so that 1 + x should round to 1 would do (after accounting for excess -+ // precision, as in 387 instructions). -+ static volatile float fmin = std::numeric_limits::min(); -+ float fmini = fmin; // we copy it so that it gets loaded at most once. -+ // -+ // Explanation: -+ // Only when fegetround() == FE_TONEAREST do we have that -+ // fmin + 1.0f == 1.0f - fmin. -+ // -+ // FE_UPWARD: -+ // fmin + 1.0f > 1 -+ // 1.0f - fmin == 1 -+ // -+ // FE_DOWNWARD or FE_TOWARDZERO: -+ // fmin + 1.0f == 1 -+ // 1.0f - fmin < 1 -+ // -+ // Note: This may fail to be accurate if fast-math has been -+ // enabled, as rounding conventions may not apply. -+ return (fmini + 1.0f == 1.0f - fmini); -+} -+ - } // namespace detail - - template -@@ -2870,7 +2912,7 @@ from_chars_result from_chars_advanced(co - answer.ec = std::errc(); // be optimistic - answer.ptr = pns.lastmatch; - // Next is Clinger's fast path. -- if (binary_format::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format::max_exponent_fast_path() && pns.mantissa <=binary_format::max_mantissa_fast_path() && !pns.too_many_digits) { -+ if (binary_format::min_exponent_fast_path() <= pns.exponent && pns.exponent <= binary_format::max_exponent_fast_path() && pns.mantissa <=binary_format::max_mantissa_fast_path() && !pns.too_many_digits && detail::rounds_to_nearest()) { - value = T(pns.mantissa); - if (pns.exponent < 0) { value = value / binary_format::exact_power_of_ten(-pns.exponent); } - else { value = value * binary_format::exact_power_of_ten(pns.exponent); } ---- libstdc++-v3/testsuite/20_util/from_chars/pr107468.cc.jj -+++ libstdc++-v3/testsuite/20_util/from_chars/pr107468.cc -@@ -0,0 +1,42 @@ -+// Copyright (C) 2022 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+ -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+ -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// . -+ -+// { dg-do run { target c++17 } } -+// { dg-add-options ieee } -+ -+#include -+#include -+#include -+#include -+ -+int -+main() -+{ -+ // FP from_char not available otherwise. -+#if __cpp_lib_to_chars >= 201611L \ -+ && _GLIBCXX_USE_C99_FENV_TR1 \ -+ && defined(FE_DOWNWARD) \ -+ && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32) -+ // PR libstdc++/107468 -+ float f; -+ char buf[] = "3.355447e+07"; -+ std::fesetround(FE_DOWNWARD); -+ auto [ptr, ec] = std::from_chars(buf, buf + sizeof(buf) - 1, f, std::chars_format::scientific); -+ VERIFY( ec == std::errc() && ptr == buf + sizeof(buf) - 1 ); -+ VERIFY( f == 33554472.0f ); -+#endif -+} diff --git a/gcc12-rh1574936.patch b/gcc12-rh1574936.patch deleted file mode 100644 index 6b4be0c..0000000 --- a/gcc12-rh1574936.patch +++ /dev/null @@ -1,30 +0,0 @@ -crt files and statically linked libgcc objects cause false positives -in annobin coverage, so we add the assembler flag to generate notes -for them. - -The patch also adds notes to libgcc_s.so, but this is harmless because -these notes only confer that there is no other annobin markup. - -2018-07-25 Florian Weimer - - * Makefile.in (LIBGCC2_CFLAGS, CRTSTUFF_CFLAGS): Add - -Wa,--generate-missing-build-notes=yes. - ---- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100 -+++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200 -@@ -246,6 +246,7 @@ LIBGCC2_DEBUG_CFLAGS = -g - LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \ - $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \ - -fbuilding-libgcc -fno-stack-protector \ -+ -Wa,--generate-missing-build-notes=yes \ - $(INHIBIT_LIBC_CFLAGS) - - # Additional options to use when compiling libgcc2.a. -@@ -301,6 +302,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(IN - $(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \ - -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \ - -fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \ -+ -Wa,--generate-missing-build-notes=yes \ - $(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY) - - # Extra flags to use when compiling crt{begin,end}.o. diff --git a/gcc12-sparc-config-detection.patch b/gcc12-sparc-config-detection.patch deleted file mode 100644 index bb06b35..0000000 --- a/gcc12-sparc-config-detection.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500 -+++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500 -@@ -2790,7 +2790,7 @@ sparc-*-rtems*) - tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h" - tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems" - ;; --sparc-*-linux*) -+sparc-*-linux* | sparcv9-*-linux*) - tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h" - extra_options="${extra_options} sparc/long-double-switch.opt" - case ${target} in -@@ -2844,7 +2844,7 @@ sparc64-*-rtems*) - extra_options="${extra_options}" - tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64" - ;; --sparc64-*-linux*) -+sparc64*-*-linux*) - tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default64.h sparc/linux64.h sparc/tso.h" - extra_options="${extra_options} sparc/long-double-switch.opt" - tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64" ---- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500 -+++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500 -@@ -1002,7 +1002,7 @@ sparc-*-elf*) - tmake_file="${tmake_file} t-fdpbit t-crtfm" - extra_parts="$extra_parts crti.o crtn.o crtfastmath.o" - ;; --sparc-*-linux*) # SPARC's running GNU/Linux, libc6 -+sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6 - tmake_file="${tmake_file} t-crtfm" - if test "${host_address}" = 64; then - tmake_file="$tmake_file sparc/t-linux64" -@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd* - tmake_file="$tmake_file t-crtfm" - extra_parts="$extra_parts crtfastmath.o" - ;; --sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux -+sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux - extra_parts="$extra_parts crtfastmath.o" - tmake_file="${tmake_file} t-crtfm sparc/t-linux" - if test "${host_address}" = 64; then diff --git a/gcc13-Wno-format-security.patch b/gcc13-Wno-format-security.patch new file mode 100644 index 0000000..4c71dac --- /dev/null +++ b/gcc13-Wno-format-security.patch @@ -0,0 +1,62 @@ +2022-01-07 Jakub Jelinek + + * Makefile.tpl (GOCFLAGS, GDCFLAGS): Filter out -Wformat-security. + * Makefile.in: Regenerated. + +2017-02-25 Jakub Jelinek + + * configure.ac: When adding -Wno-format, also add -Wno-format-security. + * configure: Regenerated. + +--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100 ++++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100 +@@ -570,7 +570,7 @@ AC_ARG_ENABLE(build-format-warnings, + AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]), + [],[enable_build_format_warnings=yes]) + AS_IF([test $enable_build_format_warnings = no], +- [wf_opt=-Wno-format],[wf_opt=]) ++ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=]) + ACX_PROG_CXX_WARNING_OPTS( + m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ], + [-Wcast-qual $wf_opt])), +--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100 ++++ gcc/configure 2017-02-25 12:42:50.041946391 +0100 +@@ -7077,7 +7077,7 @@ else + fi + + if test $enable_build_format_warnings = no; then : +- wf_opt=-Wno-format ++ wf_opt="-Wno-format -Wno-format-security" + else + wf_opt= + fi +--- Makefile.tpl.jj 2021-12-30 15:12:42.188164847 +0100 ++++ Makefile.tpl 2022-01-07 12:06:12.115550714 +0100 +@@ -446,9 +446,9 @@ LDFLAGS = @LDFLAGS@ + LIBCFLAGS = $(CFLAGS) + CXXFLAGS = @CXXFLAGS@ + LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates +-GOCFLAGS = $(CFLAGS) +-GDCFLAGS = $(CFLAGS) +-GM2FLAGS = $(CFLAGS) ++GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS)) ++GDCFLAGS = $(filter-out -Wformat-security,$(CFLAGS)) ++GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS)) + + # Pass additional PGO and LTO compiler options to the PGO build. + BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS) +--- Makefile.in.jj 2021-12-30 15:12:42.188164847 +0100 ++++ Makefile.in 2022-01-07 12:06:27.335334561 +0100 +@@ -443,9 +443,9 @@ LDFLAGS = @LDFLAGS@ + LIBCFLAGS = $(CFLAGS) + CXXFLAGS = @CXXFLAGS@ + LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates +-GOCFLAGS = $(CFLAGS) +-GDCFLAGS = $(CFLAGS) +-GM2FLAGS = $(CFLAGS) ++GOCFLAGS = $(filter-out -Wformat-security,$(CFLAGS)) ++GDCFLAGS = $(filter-out -Wformat-security,$(CFLAGS)) ++GM2FLAGS = $(filter-out -Wformat-security,$(CFLAGS)) + + # Pass additional PGO and LTO compiler options to the PGO build. + BUILD_CFLAGS = $(PGO_BUILD_CFLAGS) $(PGO_BUILD_LTO_CFLAGS) diff --git a/gcc13-d-shared-libphobos.patch b/gcc13-d-shared-libphobos.patch new file mode 100644 index 0000000..6384bbb --- /dev/null +++ b/gcc13-d-shared-libphobos.patch @@ -0,0 +1,20 @@ +2019-01-17 Jakub Jelinek + + * d-spec.cc (lang_specific_driver): Make -shared-libphobos + the default rather than -static-libphobos. + +--- gcc/d/d-spec.cc.jj 2019-01-01 12:37:49.502444257 +0100 ++++ gcc/d/d-spec.cc 2019-01-17 17:09:45.364949246 +0100 +@@ -408,9 +408,9 @@ lang_specific_driver (cl_decoded_option + /* Add `-lgphobos' if we haven't already done so. */ + if (phobos_library != PHOBOS_NOLINK) + { +- /* Default to static linking. */ +- if (phobos_library != PHOBOS_DYNAMIC) +- phobos_library = PHOBOS_STATIC; ++ /* Default to shared linking. */ ++ if (phobos_library != PHOBOS_STATIC) ++ phobos_library = PHOBOS_DYNAMIC; + + #ifdef HAVE_LD_STATIC_DYNAMIC + if (phobos_library == PHOBOS_STATIC && !static_link) diff --git a/gcc13-fortran-fdec-duplicates.patch b/gcc13-fortran-fdec-duplicates.patch new file mode 100644 index 0000000..5298baa --- /dev/null +++ b/gcc13-fortran-fdec-duplicates.patch @@ -0,0 +1,215 @@ +From 23b1fcb104c666429451ffaf936f8da5fcd3d43a Mon Sep 17 00:00:00 2001 +From: Mark Eggleston +Date: Fri, 22 Jan 2021 12:29:47 +0000 +Subject: [PATCH 01/10] Allow duplicate declarations. + +Enabled by -fdec-duplicates and -fdec. + +Some fixes by Jim MacArthur +Addition of -fdec-duplicates by Mark Eggleston +--- + gcc/fortran/lang.opt | 4 ++++ + gcc/fortran/options.cc | 1 + + gcc/fortran/symbol.cc | 21 +++++++++++++++++-- + .../gfortran.dg/duplicate_type_4.f90 | 13 ++++++++++++ + .../gfortran.dg/duplicate_type_5.f90 | 13 ++++++++++++ + .../gfortran.dg/duplicate_type_6.f90 | 13 ++++++++++++ + .../gfortran.dg/duplicate_type_7.f90 | 13 ++++++++++++ + .../gfortran.dg/duplicate_type_8.f90 | 12 +++++++++++ + .../gfortran.dg/duplicate_type_9.f90 | 12 +++++++++++ + 9 files changed, 100 insertions(+), 2 deletions(-) + create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_4.f90 + create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_5.f90 + create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_6.f90 + create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_7.f90 + create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_8.f90 + create mode 100644 gcc/testsuite/gfortran.dg/duplicate_type_9.f90 + +diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt +index 2b1977c523b..52bd522051e 100644 +--- a/gcc/fortran/lang.opt ++++ b/gcc/fortran/lang.opt +@@ -469,6 +469,10 @@ Fortran Var(flag_dec_char_conversions) + Enable the use of character literals in assignments and data statements + for non-character variables. + ++fdec-duplicates ++Fortran Var(flag_dec_duplicates) ++Allow varibles to be duplicated in the type specification matches. ++ + fdec-include + Fortran Var(flag_dec_include) + Enable legacy parsing of INCLUDE as statement. +diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc +index 3a0b98bf1ec..f19ba87f8a0 100644 +--- a/gcc/fortran/options.cc ++++ b/gcc/fortran/options.cc +@@ -77,6 +77,7 @@ set_dec_flags (int value) + SET_BITFLAG (flag_dec_format_defaults, value, value); + SET_BITFLAG (flag_dec_blank_format_item, value, value); + SET_BITFLAG (flag_dec_char_conversions, value, value); ++ SET_BITFLAG (flag_dec_duplicates, value, value); + } + + /* Finalize DEC flags. */ +diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc +index 3b988d1be22..9843175cc2a 100644 +--- a/gcc/fortran/symbol.cc ++++ b/gcc/fortran/symbol.cc +@@ -1995,6 +1995,8 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where) + if (sym->attr.result && type == BT_UNKNOWN && sym->ns->proc_name) + type = sym->ns->proc_name->ts.type; + ++ flavor = sym->attr.flavor; ++ + if (type != BT_UNKNOWN && !(sym->attr.function && sym->attr.implicit_type) + && !(gfc_state_stack->previous && gfc_state_stack->previous->previous + && gfc_state_stack->previous->previous->state == COMP_SUBMODULE) +@@ -2007,6 +2009,23 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where) + else if (sym->attr.function && sym->attr.result) + gfc_error ("Symbol %qs at %L already has basic type of %s", + sym->ns->proc_name->name, where, gfc_basic_typename (type)); ++ else if (flag_dec_duplicates) ++ { ++ /* Ignore temporaries and class/procedure names */ ++ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS ++ || sym->ts.type == BT_PROCEDURE) ++ return false; ++ ++ if (gfc_compare_types (&sym->ts, ts) ++ && (flavor == FL_UNKNOWN || flavor == FL_VARIABLE ++ || flavor == FL_PROCEDURE)) ++ { ++ return gfc_notify_std (GFC_STD_LEGACY, ++ "Symbol '%qs' at %L already has " ++ "basic type of %s", sym->name, where, ++ gfc_basic_typename (type)); ++ } ++ } + else + gfc_error ("Symbol %qs at %L already has basic type of %s", sym->name, + where, gfc_basic_typename (type)); +@@ -2020,8 +2039,6 @@ gfc_add_type (gfc_symbol *sym, gfc_typespec *ts, locus *where) + return false; + } + +- flavor = sym->attr.flavor; +- + if (flavor == FL_PROGRAM || flavor == FL_BLOCK_DATA || flavor == FL_MODULE + || flavor == FL_LABEL + || (flavor == FL_PROCEDURE && sym->attr.subroutine) +diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_4.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90 +new file mode 100644 +index 00000000000..cdd29ea8846 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/duplicate_type_4.f90 +@@ -0,0 +1,13 @@ ++! { dg-do compile } ++! { dg-options "-std=f95" } ++ ++! PR fortran/30239 ++! Check for errors when a symbol gets declared a type twice, even if it ++! is the same. ++ ++INTEGER FUNCTION foo () ++ IMPLICIT NONE ++ INTEGER :: x ++ INTEGER :: x ! { dg-error "basic type of" } ++ x = 42 ++END FUNCTION foo +diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_5.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_5.f90 +new file mode 100644 +index 00000000000..00f931809aa +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/duplicate_type_5.f90 +@@ -0,0 +1,13 @@ ++! { dg-do run } ++! { dg-options "-fdec" } ++! ++! Test case contributed by Mark Eggleston ++! ++ ++program test ++ implicit none ++ integer :: x ++ integer :: x ++ x = 42 ++ if (x /= 42) stop 1 ++end program test +diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_6.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_6.f90 +new file mode 100644 +index 00000000000..f0df27e323c +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/duplicate_type_6.f90 +@@ -0,0 +1,13 @@ ++! { dg-do run } ++! { dg-options "-std=legacy -fdec-duplicates" } ++! ++! Test case contributed by Mark Eggleston ++! ++ ++program test ++ implicit none ++ integer :: x ++ integer :: x ++ x = 42 ++ if (x /= 42) stop 1 ++end program test +diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_7.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_7.f90 +new file mode 100644 +index 00000000000..f32472ff586 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/duplicate_type_7.f90 +@@ -0,0 +1,13 @@ ++! { dg-do run } ++! { dg-options "-fdec-duplicates" } ++! ++! Test case contributed by Mark Eggleston ++! ++ ++program test ++ implicit none ++ integer :: x ++ integer :: x! { dg-warning "Legacy Extension" } ++ x = 42 ++ if (x /= 42) stop 1 ++end program test +diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_8.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_8.f90 +new file mode 100644 +index 00000000000..23c94add179 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/duplicate_type_8.f90 +@@ -0,0 +1,12 @@ ++! { dg-do compile } ++! { dg-options "-fdec -fno-dec-duplicates" } ++! ++! Test case contributed by Mark Eggleston ++! ++ ++integer function foo () ++ implicit none ++ integer :: x ++ integer :: x ! { dg-error "basic type of" } ++ x = 42 ++end function foo +diff --git a/gcc/testsuite/gfortran.dg/duplicate_type_9.f90 b/gcc/testsuite/gfortran.dg/duplicate_type_9.f90 +new file mode 100644 +index 00000000000..d5edee4d8ee +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/duplicate_type_9.f90 +@@ -0,0 +1,12 @@ ++! { dg-do compile } ++! { dg-options "-fdec-duplicates -fno-dec-duplicates" } ++! ++! Test case contributed by Mark Eggleston ++! ++ ++integer function foo () ++ implicit none ++ integer :: x ++ integer :: x ! { dg-error "basic type of" } ++ x = 42 ++end function foo +-- +2.27.0 + diff --git a/gcc13-fortran-fdec-non-logical-if.patch b/gcc13-fortran-fdec-non-logical-if.patch new file mode 100644 index 0000000..a3a830c --- /dev/null +++ b/gcc13-fortran-fdec-non-logical-if.patch @@ -0,0 +1,378 @@ +From cc87ddb841017bb0976b05091733609ee17d7f05 Mon Sep 17 00:00:00 2001 +From: Mark Eggleston +Date: Fri, 22 Jan 2021 13:15:17 +0000 +Subject: [PATCH 07/10] Allow non-logical expressions in IF statements + +Use -fdec-non-logical-if to enable feature. Also enabled using -fdec. +--- + gcc/fortran/lang.opt | 4 ++ + gcc/fortran/options.cc | 1 + + gcc/fortran/resolve.cc | 60 ++++++++++++++++--- + ...gical_expressions_if_statements_blocks_1.f | 25 ++++++++ + ...gical_expressions_if_statements_blocks_2.f | 25 ++++++++ + ...gical_expressions_if_statements_blocks_3.f | 25 ++++++++ + ...gical_expressions_if_statements_blocks_4.f | 45 ++++++++++++++ + ...gical_expressions_if_statements_blocks_5.f | 45 ++++++++++++++ + ...gical_expressions_if_statements_blocks_6.f | 45 ++++++++++++++ + 9 files changed, 266 insertions(+), 9 deletions(-) + create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f + +diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt +index 4a269ebb22d..d886c2f33ed 100644 +--- a/gcc/fortran/lang.opt ++++ b/gcc/fortran/lang.opt +@@ -506,6 +506,10 @@ fdec-override-kind + Fortran Var(flag_dec_override_kind) + Enable support for per variable kind specification. + ++fdec-non-logical-if ++Fortran Var(flag_dec_non_logical_if) ++Enable support for non-logical expressions in if statements. ++ + fdec-structure + Fortran Var(flag_dec_structure) + Enable support for DEC STRUCTURE/RECORD. +diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc +index edbab483b36..a946c86790a 100644 +--- a/gcc/fortran/options.cc ++++ b/gcc/fortran/options.cc +@@ -79,6 +79,7 @@ set_dec_flags (int value) + SET_BITFLAG (flag_dec_char_conversions, value, value); + SET_BITFLAG (flag_dec_duplicates, value, value); + SET_BITFLAG (flag_dec_override_kind, value, value); ++ SET_BITFLAG (flag_dec_non_logical_if, value, value); + } + + /* Finalize DEC flags. */ +diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc +index bc0df0fdb99..07dd039f3bf 100644 +--- a/gcc/fortran/resolve.cc ++++ b/gcc/fortran/resolve.cc +@@ -10789,10 +10789,31 @@ gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns) + switch (b->op) + { + case EXEC_IF: +- if (t && b->expr1 != NULL +- && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0)) +- gfc_error ("IF clause at %L requires a scalar LOGICAL expression", +- &b->expr1->where); ++ if (t && b->expr1 != NULL) ++ { ++ if (flag_dec_non_logical_if && b->expr1->ts.type != BT_LOGICAL) ++ { ++ gfc_expr* cast; ++ cast = gfc_ne (b->expr1, ++ gfc_get_int_expr (1, &gfc_current_locus, 0), ++ INTRINSIC_NE); ++ if (cast == NULL) ++ gfc_internal_error ("gfc_resolve_blocks(): Failed to cast " ++ "to LOGICAL in IF"); ++ b->expr1 = cast; ++ if (warn_conversion_extra) ++ { ++ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in" ++ " IF statement condition %L will be true if" ++ " it evaluates to nonzero", ++ &b->expr1->where); ++ } ++ } ++ ++ if ((b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0)) ++ gfc_error ("IF clause at %L requires a scalar LOGICAL " ++ "expression", &b->expr1->where); ++ } + break; + + case EXEC_WHERE: +@@ -12093,11 +12114,32 @@ start: + break; + + case EXEC_IF: +- if (t && code->expr1 != NULL +- && (code->expr1->ts.type != BT_LOGICAL +- || code->expr1->rank != 0)) +- gfc_error ("IF clause at %L requires a scalar LOGICAL expression", +- &code->expr1->where); ++ if (t && code->expr1 != NULL) ++ { ++ if (flag_dec_non_logical_if ++ && code->expr1->ts.type != BT_LOGICAL) ++ { ++ gfc_expr* cast; ++ cast = gfc_ne (code->expr1, ++ gfc_get_int_expr (1, &gfc_current_locus, 0), ++ INTRINSIC_NE); ++ if (cast == NULL) ++ gfc_internal_error ("gfc_resolve_code(): Failed to cast " ++ "to LOGICAL in IF"); ++ code->expr1 = cast; ++ if (warn_conversion_extra) ++ { ++ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in" ++ " IF statement condition %L will be true if" ++ " it evaluates to nonzero", ++ &code->expr1->where); ++ } ++ } ++ ++ if (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank != 0) ++ gfc_error ("IF clause at %L requires a scalar LOGICAL " ++ "expression", &code->expr1->where); ++ } + break; + + case EXEC_CALL: +diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f +new file mode 100644 +index 00000000000..0101db893ca +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f +@@ -0,0 +1,25 @@ ++! { dg-do run } ++! { dg-options "-fdec -Wconversion-extra" } ++! ++! Allow logical expressions in if statements and blocks ++! ++! Contributed by Francisco Redondo Marchena ++! and Jeff Law ++! Modified by Mark Eggleston ++! ++ PROGRAM logical_exp_if_st_bl ++ INTEGER ipos/1/ ++ INTEGER ineg/0/ ++ ++ ! Test non logical variables ++ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" } ++ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" } ++ ++ ! Test non logical expressions in if statements ++ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" } ++ ++ ! Test non logical expressions in if blocks ++ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" } ++ STOP 4 ++ endif ++ END +diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f +new file mode 100644 +index 00000000000..876f4e09508 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f +@@ -0,0 +1,25 @@ ++! { dg-do run } ++! { dg-options "-fdec-non-logical-if -Wconversion-extra" } ++! ++! Allow logical expressions in if statements and blocks ++! ++! Contributed by Francisco Redondo Marchena ++! and Jeff Law ++! Modified by Mark Eggleston ++! ++ PROGRAM logical_exp_if_st_bl ++ INTEGER ipos/1/ ++ INTEGER ineg/0/ ++ ++ ! Test non logical variables ++ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" } ++ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" } ++ ++ ! Test non logical expressions in if statements ++ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" } ++ ++ ! Test non logical expressions in if blocks ++ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" } ++ STOP 4 ++ endif ++ END +diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f +new file mode 100644 +index 00000000000..35cb4c51b8d +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f +@@ -0,0 +1,25 @@ ++! { dg-do compile } ++! { dg-options "-fdec -fno-dec-non-logical-if" } ++! ++! Allow logical expressions in if statements and blocks ++! ++! Contributed by Francisco Redondo Marchena ++! and Jeff Law ++! Modified by Mark Eggleston ++! ++ PROGRAM logical_exp_if_st_bl ++ INTEGER ipos/1/ ++ INTEGER ineg/0/ ++ ++ ! Test non logical variables ++ if (ineg) STOP 1 ! { dg-error "IF clause at" } ++ if (0) STOP 2 ! { dg-error "IF clause at" } ++ ++ ! Test non logical expressions in if statements ++ if (MOD(ipos, 1)) STOP 3 ! { dg-error "IF clause at" } ++ ++ ! Test non logical expressions in if blocks ++ if (MOD(2 * ipos, 2)) then ! { dg-error "IF clause at" } ++ STOP 4 ++ endif ++ END +diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f +new file mode 100644 +index 00000000000..7b60b60827f +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f +@@ -0,0 +1,45 @@ ++! { dg-do run } ++! { dg-options "-fdec -Wconversion-extra" } ++! ++! Contributed by Francisco Redondo Marchena ++! and Jeff Law ++! Modified by Mark Eggleston ++! ++ function othersub1() ++ integer*4 othersub1 ++ othersub1 = 9 ++ end ++ ++ function othersub2() ++ integer*4 othersub2 ++ othersub2 = 0 ++ end ++ ++ program MAIN ++ integer*4 othersub1 ++ integer*4 othersub2 ++ integer a /1/ ++ integer b /2/ ++ ++ if (othersub1()) then ! { dg-warning "if it evaluates to nonzero" } ++ write(*,*) "OK" ++ else ++ stop 1 ++ end if ++ if (othersub2()) then ! { dg-warning "if it evaluates to nonzero" } ++ stop 2 ++ else ++ write(*,*) "OK" ++ end if ++ if (a-b) then ! { dg-warning "if it evaluates to nonzero" } ++ write(*,*) "OK" ++ else ++ stop 3 ++ end if ++ if (b-(a+1)) then ! { dg-warning "if it evaluates to nonzero" } ++ stop 3 ++ else ++ write(*,*) "OK" ++ end if ++ end ++ +diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f +new file mode 100644 +index 00000000000..80336f48ca1 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f +@@ -0,0 +1,45 @@ ++! { dg-do run } ++! { dg-options "-fdec-non-logical-if -Wconversion-extra" } ++! ++! Contributed by Francisco Redondo Marchena ++! and Jeff Law ++! Modified by Mark Eggleston ++! ++ function othersub1() ++ integer*4 othersub1 ++ othersub1 = 9 ++ end ++ ++ function othersub2() ++ integer*4 othersub2 ++ othersub2 = 0 ++ end ++ ++ program MAIN ++ integer*4 othersub1 ++ integer*4 othersub2 ++ integer a /1/ ++ integer b /2/ ++ ++ if (othersub1()) then ! { dg-warning "Non-LOGICAL type in IF statement" } ++ write(*,*) "OK" ++ else ++ stop 1 ++ end if ++ if (othersub2()) then ! { dg-warning "Non-LOGICAL type in IF statement" } ++ stop 2 ++ else ++ write(*,*) "OK" ++ end if ++ if (a-b) then ! { dg-warning "Non-LOGICAL type in IF statement" } ++ write(*,*) "OK" ++ else ++ stop 3 ++ end if ++ if (b-(a+1)) then ! { dg-warning "Non-LOGICAL type in IF statement" } ++ stop 3 ++ else ++ write(*,*) "OK" ++ end if ++ end ++ +diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f +new file mode 100644 +index 00000000000..e1125ca717a +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f +@@ -0,0 +1,45 @@ ++! { dg-do compile } ++! { dg-options "-fdec -fno-dec-non-logical-if" } ++! ++! Contributed by Francisco Redondo Marchena ++! and Jeff Law ++! Modified by Mark Eggleston ++! ++ function othersub1() ++ integer*4 othersub1 ++ othersub1 = 9 ++ end ++ ++ function othersub2() ++ integer*4 othersub2 ++ othersub2 = 0 ++ end ++ ++ program MAIN ++ integer*4 othersub1 ++ integer*4 othersub2 ++ integer a /1/ ++ integer b /2/ ++ ++ if (othersub1()) then ! { dg-error "IF clause at" } ++ write(*,*) "OK" ++ else ++ stop 1 ++ end if ++ if (othersub2()) then ! { dg-error "IF clause at" } ++ stop 2 ++ else ++ write(*,*) "OK" ++ end if ++ if (a-b) then ! { dg-error "IF clause at" } ++ write(*,*) "OK" ++ else ++ stop 3 ++ end if ++ if (b-(a+1)) then ! { dg-error "IF clause at" } ++ stop 3 ++ else ++ write(*,*) "OK" ++ end if ++ end ++ +-- +2.27.0 + diff --git a/gcc13-fortran-fdec-override-kind.patch b/gcc13-fortran-fdec-override-kind.patch new file mode 100644 index 0000000..370fa56 --- /dev/null +++ b/gcc13-fortran-fdec-override-kind.patch @@ -0,0 +1,588 @@ +From 786869fd62813e80da9b6545a295d53c36275c19 Mon Sep 17 00:00:00 2001 +From: Mark Eggleston +Date: Fri, 22 Jan 2021 13:12:14 +0000 +Subject: [PATCH 06/10] Allow string length and kind to be specified on a per + variable basis. + +This allows kind/length to be mixed with array specification in +declarations. + +e.g. + + INTEGER*4 x*2, y*8 + CHARACTER names*20(10) + REAL v(100)*8, vv*4(50) + +The per-variable size overrides the kind or length specified for the type. + +Use -fdec-override-kind to enable. Also enabled by -fdec. + +Note: this feature is a merger of two previously separate features. + +Now accepts named constants as kind parameters: + + INTEGER A + PARAMETER (A=2) + INTEGER B*(A) + +Contributed by Mark Eggleston + +Now rejects invalid kind parameters and prints error messages: + + INTEGER X*3 + +caused an internal compiler error. + +Contributed by Mark Eggleston +--- + gcc/fortran/decl.cc | 156 ++++++++++++++---- + gcc/fortran/lang.opt | 4 + + gcc/fortran/options.cc | 1 + + .../dec_mixed_char_array_declaration_1.f | 13 ++ + .../dec_mixed_char_array_declaration_2.f | 13 ++ + .../dec_mixed_char_array_declaration_3.f | 13 ++ + .../gfortran.dg/dec_spec_in_variable_1.f | 31 ++++ + .../gfortran.dg/dec_spec_in_variable_2.f | 31 ++++ + .../gfortran.dg/dec_spec_in_variable_3.f | 31 ++++ + .../gfortran.dg/dec_spec_in_variable_4.f | 14 ++ + .../gfortran.dg/dec_spec_in_variable_5.f | 19 +++ + .../gfortran.dg/dec_spec_in_variable_6.f | 19 +++ + .../gfortran.dg/dec_spec_in_variable_7.f | 15 ++ + .../gfortran.dg/dec_spec_in_variable_8.f | 14 ++ + 14 files changed, 340 insertions(+), 34 deletions(-) + create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f + create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f + +diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc +index 5c8c1b7981b..f7dc9d8263d 100644 +--- a/gcc/fortran/decl.cc ++++ b/gcc/fortran/decl.cc +@@ -1213,6 +1213,54 @@ syntax: + return MATCH_ERROR; + } + ++/* This matches the nonstandard kind given after a variable name, like: ++ INTEGER x*2, y*4 ++ The per-variable kind will override any kind given in the type ++ declaration. ++*/ ++ ++static match ++match_per_symbol_kind (int *length) ++{ ++ match m; ++ gfc_expr *expr = NULL; ++ ++ m = gfc_match_char ('*'); ++ if (m != MATCH_YES) ++ return m; ++ ++ m = gfc_match_small_literal_int (length, NULL); ++ if (m == MATCH_YES || m == MATCH_ERROR) ++ return m; ++ ++ if (gfc_match_char ('(') == MATCH_NO) ++ return MATCH_ERROR; ++ ++ m = gfc_match_expr (&expr); ++ if (m == MATCH_YES) ++ { ++ m = MATCH_ERROR; // Assume error ++ if (gfc_expr_check_typed (expr, gfc_current_ns, false)) ++ { ++ if ((expr->expr_type == EXPR_CONSTANT) ++ && (expr->ts.type == BT_INTEGER)) ++ { ++ *length = mpz_get_si(expr->value.integer); ++ m = MATCH_YES; ++ } ++ } ++ ++ if (m == MATCH_YES) ++ { ++ if (gfc_match_char (')') == MATCH_NO) ++ m = MATCH_ERROR; ++ } ++ } ++ ++ if (expr != NULL) ++ gfc_free_expr (expr); ++ return m; ++} + + /* Special subroutine for finding a symbol. Check if the name is found + in the current name space. If not, and we're compiling a function or +@@ -2443,6 +2491,35 @@ check_function_name (char *name) + } + + ++static match ++match_character_length_clause (gfc_charlen **cl, bool *cl_deferred, int elem) ++{ ++ gfc_expr* char_len; ++ char_len = NULL; ++ ++ match m = match_char_length (&char_len, cl_deferred, false); ++ if (m == MATCH_YES) ++ { ++ *cl = gfc_new_charlen (gfc_current_ns, NULL); ++ (*cl)->length = char_len; ++ } ++ else if (m == MATCH_NO) ++ { ++ if (elem > 1 ++ && (current_ts.u.cl->length == NULL ++ || current_ts.u.cl->length->expr_type != EXPR_CONSTANT)) ++ { ++ *cl = gfc_new_charlen (gfc_current_ns, NULL); ++ (*cl)->length = gfc_copy_expr (current_ts.u.cl->length); ++ } ++ else ++ *cl = current_ts.u.cl; ++ ++ *cl_deferred = current_ts.deferred; ++ } ++ return m; ++} ++ + /* Match a variable name with an optional initializer. When this + subroutine is called, a variable is expected to be parsed next. + Depending on what is happening at the moment, updates either the +@@ -2453,7 +2530,7 @@ variable_decl (int elem) + { + char name[GFC_MAX_SYMBOL_LEN + 1]; + static unsigned int fill_id = 0; +- gfc_expr *initializer, *char_len; ++ gfc_expr *initializer; + gfc_array_spec *as; + gfc_array_spec *cp_as; /* Extra copy for Cray Pointees. */ + gfc_charlen *cl; +@@ -2462,11 +2539,15 @@ variable_decl (int elem) + match m; + bool t; + gfc_symbol *sym; ++ match cl_match; ++ match kind_match; ++ int overridden_kind; + char c; + + initializer = NULL; + as = NULL; + cp_as = NULL; ++ kind_match = MATCH_NO; + + /* When we get here, we've just matched a list of attributes and + maybe a type and a double colon. The next thing we expect to see +@@ -2519,6 +2600,28 @@ variable_decl (int elem) + + var_locus = gfc_current_locus; + ++ ++ cl = NULL; ++ cl_deferred = false; ++ cl_match = MATCH_NO; ++ ++ /* Check for a character length clause before an array clause */ ++ if (flag_dec_override_kind) ++ { ++ if (current_ts.type == BT_CHARACTER) ++ { ++ cl_match = match_character_length_clause (&cl, &cl_deferred, elem); ++ if (cl_match == MATCH_ERROR) ++ goto cleanup; ++ } ++ else ++ { ++ kind_match = match_per_symbol_kind (&overridden_kind); ++ if (kind_match == MATCH_ERROR) ++ goto cleanup; ++ } ++ } ++ + /* Now we could see the optional array spec. or character length. */ + m = gfc_match_array_spec (&as, true, true); + if (m == MATCH_ERROR) +@@ -2667,40 +2770,12 @@ variable_decl (int elem) + } + } + +- char_len = NULL; +- cl = NULL; +- cl_deferred = false; +- +- if (current_ts.type == BT_CHARACTER) ++ /* Second chance for a character length clause */ ++ if (cl_match == MATCH_NO && current_ts.type == BT_CHARACTER) + { +- switch (match_char_length (&char_len, &cl_deferred, false)) +- { +- case MATCH_YES: +- cl = gfc_new_charlen (gfc_current_ns, NULL); +- +- cl->length = char_len; +- break; +- +- /* Non-constant lengths need to be copied after the first +- element. Also copy assumed lengths. */ +- case MATCH_NO: +- if (elem > 1 +- && (current_ts.u.cl->length == NULL +- || current_ts.u.cl->length->expr_type != EXPR_CONSTANT)) +- { +- cl = gfc_new_charlen (gfc_current_ns, NULL); +- cl->length = gfc_copy_expr (current_ts.u.cl->length); +- } +- else +- cl = current_ts.u.cl; +- +- cl_deferred = current_ts.deferred; +- +- break; +- +- case MATCH_ERROR: +- goto cleanup; +- } ++ m = match_character_length_clause (&cl, &cl_deferred, elem); ++ if (m == MATCH_ERROR) ++ goto cleanup; + } + + /* The dummy arguments and result of the abreviated form of MODULE +@@ -2802,6 +2877,19 @@ variable_decl (int elem) + goto cleanup; + } + ++ if (kind_match == MATCH_YES) ++ { ++ gfc_find_symbol (name, gfc_current_ns, 1, &sym); ++ /* sym *must* be found at this point */ ++ sym->ts.kind = overridden_kind; ++ if (gfc_validate_kind (sym->ts.type, sym->ts.kind, true) < 0) ++ { ++ gfc_error ("Kind %d not supported for type %s at %C", ++ sym->ts.kind, gfc_basic_typename (sym->ts.type)); ++ return MATCH_ERROR; ++ } ++ } ++ + if (!check_function_name (name)) + { + m = MATCH_ERROR; +diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt +index 25cc948699b..4a269ebb22d 100644 +--- a/gcc/fortran/lang.opt ++++ b/gcc/fortran/lang.opt +@@ -502,6 +502,10 @@ fdec-math + Fortran Var(flag_dec_math) + Enable legacy math intrinsics for compatibility. + ++fdec-override-kind ++Fortran Var(flag_dec_override_kind) ++Enable support for per variable kind specification. ++ + fdec-structure + Fortran Var(flag_dec_structure) + Enable support for DEC STRUCTURE/RECORD. +diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc +index d6bd36c3a8a..edbab483b36 100644 +--- a/gcc/fortran/options.cc ++++ b/gcc/fortran/options.cc +@@ -78,6 +78,7 @@ set_dec_flags (int value) + SET_BITFLAG (flag_dec_blank_format_item, value, value); + SET_BITFLAG (flag_dec_char_conversions, value, value); + SET_BITFLAG (flag_dec_duplicates, value, value); ++ SET_BITFLAG (flag_dec_override_kind, value, value); + } + + /* Finalize DEC flags. */ +diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f +new file mode 100644 +index 00000000000..706ea4112a4 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f +@@ -0,0 +1,13 @@ ++! { dg-do run } ++! { dg-options "-fdec" } ++! ++! Test character declaration with mixed string length and array specification ++! ++! Contributed by Jim MacArthur ++! Modified by Mark Eggleston ++! ++ PROGRAM character_declaration ++ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ ++ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/ ++ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 ++ END +diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f +new file mode 100644 +index 00000000000..26d2acf01de +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f +@@ -0,0 +1,13 @@ ++! { dg-do run } ++! { dg-options "-fdec-override-kind" } ++! ++! Test character declaration with mixed string length and array specification ++! ++! Contributed by Jim MacArthur ++! Modified by Mark Eggleston ++! ++ PROGRAM character_declaration ++ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ ++ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/ ++ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 ++ END +diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f +new file mode 100644 +index 00000000000..76e4f0bdb93 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f +@@ -0,0 +1,13 @@ ++! { dg-do compile } ++! { dg-options "-fdec-override-kind -fno-dec-override-kind" } ++! ++! Test character declaration with mixed string length and array specification ++! ++! Contributed by Jim MacArthur ++! Modified by Mark Eggleston ++! ++ PROGRAM character_declaration ++ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ ! { dg-error "Syntax error" } ++ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/ ++ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 ! { dg-error " Operands of comparison operator" } ++ END +diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f +new file mode 100644 +index 00000000000..edd0f5874b7 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f +@@ -0,0 +1,31 @@ ++! { dg-do run } ++! { dg-options "-fdec" } ++! ++! Test kind specification in variable not in type ++! ++! Contributed by Mark Eggleston ++! ++ program spec_in_var ++ integer*8 ai*1, bi*4, ci ++ real*4 ar*4, br*8, cr ++ ++ ai = 1 ++ ar = 1.0 ++ bi = 2 ++ br = 2.0 ++ ci = 3 ++ cr = 3.0 ++ ++ if (ai .ne. 1) stop 1 ++ if (abs(ar - 1.0) > 1.0D-6) stop 2 ++ if (bi .ne. 2) stop 3 ++ if (abs(br - 2.0) > 1.0D-6) stop 4 ++ if (ci .ne. 3) stop 5 ++ if (abs(cr - 3.0) > 1.0D-6) stop 6 ++ if (kind(ai) .ne. 1) stop 7 ++ if (kind(ar) .ne. 4) stop 8 ++ if (kind(bi) .ne. 4) stop 9 ++ if (kind(br) .ne. 8) stop 10 ++ if (kind(ci) .ne. 8) stop 11 ++ if (kind(cr) .ne. 4) stop 12 ++ end +diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f +new file mode 100644 +index 00000000000..bfaba584dbb +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f +@@ -0,0 +1,31 @@ ++! { dg-do run } ++! { dg-options "-fdec-override-kind" } ++! ++! Test kind specification in variable not in type ++! ++! Contributed by Mark Eggleston ++! ++ program spec_in_var ++ integer*8 ai*1, bi*4, ci ++ real*4 ar*4, br*8, cr ++ ++ ai = 1 ++ ar = 1.0 ++ bi = 2 ++ br = 2.0 ++ ci = 3 ++ cr = 3.0 ++ ++ if (ai .ne. 1) stop 1 ++ if (abs(ar - 1.0) > 1.0D-6) stop 2 ++ if (bi .ne. 2) stop 3 ++ if (abs(br - 2.0) > 1.0D-6) stop 4 ++ if (ci .ne. 3) stop 5 ++ if (abs(cr - 3.0) > 1.0D-6) stop 6 ++ if (kind(ai) .ne. 1) stop 7 ++ if (kind(ar) .ne. 4) stop 8 ++ if (kind(bi) .ne. 4) stop 9 ++ if (kind(br) .ne. 8) stop 10 ++ if (kind(ci) .ne. 8) stop 11 ++ if (kind(cr) .ne. 4) stop 12 ++ end +diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f +new file mode 100644 +index 00000000000..5ff434e7466 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f +@@ -0,0 +1,31 @@ ++! { dg-do compile } ++! { dg-options "-fdec -fno-dec-override-kind" } ++! ++! Test kind specification in variable not in type ++! ++! Contributed by Mark Eggleston ++! ++ program spec_in_var ++ integer*8 ai*1, bi*4, ci ! { dg-error "Syntax error" } ++ real*4 ar*4, br*8, cr ! { dg-error "Syntax error" } ++ ++ ai = 1 ++ ar = 1.0 ++ bi = 2 ++ br = 2.0 ++ ci = 3 ++ cr = 3.0 ++ ++ if (ai .ne. 1) stop 1 ++ if (abs(ar - 1.0) > 1.0D-6) stop 2 ++ if (bi .ne. 2) stop 3 ++ if (abs(br - 2.0) > 1.0D-6) stop 4 ++ if (ci .ne. 3) stop 5 ++ if (abs(cr - 3.0) > 1.0D-6) stop 6 ++ if (kind(ai) .ne. 1) stop 7 ++ if (kind(ar) .ne. 4) stop 8 ++ if (kind(bi) .ne. 4) stop 9 ++ if (kind(br) .ne. 8) stop 10 ++ if (kind(ci) .ne. 8) stop 11 ++ if (kind(cr) .ne. 4) stop 12 ++ end +diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f +new file mode 100644 +index 00000000000..c01980e8b9d +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f +@@ -0,0 +1,14 @@ ++! { dg-do compile } ++! ++! Test kind specification in variable not in type. The per variable ++! kind specification is not enabled so these should fail ++! ++! Contributed by Mark Eggleston ++! ++ program spec_in_var ++ integer a ++ parameter(a=2) ++ integer b*(a) ! { dg-error "Syntax error" } ++ real c*(8) ! { dg-error "Syntax error" } ++ logical d*1_1 ! { dg-error "Syntax error" } ++ end +diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f +new file mode 100644 +index 00000000000..e2f39da3f4f +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f +@@ -0,0 +1,19 @@ ++! { dg-do run } ++! { dg-options "-fdec-override-kind" } ++! ++! Test kind specification in variable not in type ++! ++! Contributed by Mark Eggleston ++! ++ program spec_in_var ++ integer a ++ parameter(a=2) ++ integer b*(a) ++ real c*(8) ++ logical d*(1_1) ++ character e*(a) ++ if (kind(b).ne.2) stop 1 ++ if (kind(c).ne.8) stop 2 ++ if (kind(d).ne.1) stop 3 ++ if (len(e).ne.2) stop 4 ++ end +diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f +new file mode 100644 +index 00000000000..569747874e3 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f +@@ -0,0 +1,19 @@ ++! { dg-do run } ++! { dg-options "-fdec" } ++! ++! Test kind specification in variable not in type ++! ++! Contributed by Mark Eggleston ++! ++ program spec_in_var ++ integer a ++ parameter(a=2) ++ integer b*(a) ++ real c*(8) ++ logical d*(1_1) ++ character e*(a) ++ if (kind(b).ne.2) stop 1 ++ if (kind(c).ne.8) stop 2 ++ if (kind(d).ne.1) stop 3 ++ if (len(e).ne.2) stop 4 ++ end +diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f +new file mode 100644 +index 00000000000..b975bfd15c5 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f +@@ -0,0 +1,15 @@ ++! { dg-do compile } ++! { dg-options "-fdec -fno-dec-override-kind" } ++! ++! Test kind specification in variable not in type as the per variable ++! kind specification is not enables these should fail ++! ++! Contributed by Mark Eggleston ++! ++ program spec_in_var ++ integer a ++ parameter(a=2) ++ integer b*(a) ! { dg-error "Syntax error" } ++ real c*(8) ! { dg-error "Syntax error" } ++ logical d*1_1 ! { dg-error "Syntax error" } ++ end +diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f +new file mode 100644 +index 00000000000..85732e0bd85 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f +@@ -0,0 +1,14 @@ ++! { dg-do compile } ++! { dg-options "-fdec" } ++! ++! Check that invalid kind values are rejected. ++! ++! Contributed by Mark Eggleston ++! ++ program spec_in_var ++ integer a ++ parameter(a=3) ++ integer b*(a) ! { dg-error "Kind 3 not supported" } ++ real c*(78) ! { dg-error "Kind 78 not supported" } ++ logical d*(*) ! { dg-error "Invalid character" } ++ end +-- +2.27.0 + diff --git a/gcc13-fortran-flogical-as-integer.patch b/gcc13-fortran-flogical-as-integer.patch new file mode 100644 index 0000000..28df5e1 --- /dev/null +++ b/gcc13-fortran-flogical-as-integer.patch @@ -0,0 +1,305 @@ +From 9b45f3063dfd2b893e7963a4828c1b0afecdc68a Mon Sep 17 00:00:00 2001 +From: Mark Eggleston +Date: Fri, 22 Jan 2021 12:41:46 +0000 +Subject: [PATCH 02/10] Convert LOGICAL to INTEGER for arithmetic ops, and vice + versa + +We allow converting LOGICAL types to INTEGER when doing arithmetic +operations, and converting INTEGER types to LOGICAL for use in +boolean operations. + +This feature is enabled with the -flogical-as-integer flag. + +Note: using this feature will disable bitwise logical operations enabled by +-fdec. +--- + gcc/fortran/lang.opt | 4 ++ + gcc/fortran/resolve.cc | 55 ++++++++++++++++++- + .../logical_to_integer_and_vice_versa_1.f | 31 +++++++++++ + .../logical_to_integer_and_vice_versa_2.f | 31 +++++++++++ + .../logical_to_integer_and_vice_versa_3.f | 33 +++++++++++ + .../logical_to_integer_and_vice_versa_4.f | 33 +++++++++++ + 6 files changed, 186 insertions(+), 1 deletion(-) + create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f + create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f + create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f + create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f + +diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt +index 52bd522051e..c4da248f07c 100644 +--- a/gcc/fortran/lang.opt ++++ b/gcc/fortran/lang.opt +@@ -497,6 +497,10 @@ fdec-static + Fortran Var(flag_dec_static) + Enable DEC-style STATIC and AUTOMATIC attributes. + ++flogical-as-integer ++Fortran Var(flag_logical_as_integer) ++Convert from integer to logical or logical to integer for arithmetic operations. ++ + fdefault-double-8 + Fortran Var(flag_default_double) + Set the default double precision kind to an 8 byte wide type. +diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc +index c075d0fa0c4..4b90cb59902 100644 +--- a/gcc/fortran/resolve.cc ++++ b/gcc/fortran/resolve.cc +@@ -3915,7 +3915,6 @@ lookup_uop_fuzzy (const char *op, gfc_symtree *uop) + return gfc_closest_fuzzy_match (op, candidates); + } + +- + /* Callback finding an impure function as an operand to an .and. or + .or. expression. Remember the last function warned about to + avoid double warnings when recursing. */ +@@ -3975,6 +3974,22 @@ convert_hollerith_to_character (gfc_expr *e) + } + } + ++/* If E is a logical, convert it to an integer and issue a warning ++ for the conversion. */ ++ ++static void ++convert_integer_to_logical (gfc_expr *e) ++{ ++ if (e->ts.type == BT_INTEGER) ++ { ++ /* Convert to LOGICAL */ ++ gfc_typespec t; ++ t.type = BT_LOGICAL; ++ t.kind = 1; ++ gfc_convert_type_warn (e, &t, 2, 1); ++ } ++} ++ + /* Convert to numeric and issue a warning for the conversion. */ + + static void +@@ -3987,6 +4002,22 @@ convert_to_numeric (gfc_expr *a, gfc_expr *b) + gfc_convert_type_warn (a, &t, 2, 1); + } + ++/* If E is a logical, convert it to an integer and issue a warning ++ for the conversion. */ ++ ++static void ++convert_logical_to_integer (gfc_expr *e) ++{ ++ if (e->ts.type == BT_LOGICAL) ++ { ++ /* Convert to INTEGER */ ++ gfc_typespec t; ++ t.type = BT_INTEGER; ++ t.kind = 1; ++ gfc_convert_type_warn (e, &t, 2, 1); ++ } ++} ++ + /* Resolve an operator expression node. This can involve replacing the + operation with a user defined function call. */ + +@@ -4072,6 +4103,12 @@ resolve_operator (gfc_expr *e) + case INTRINSIC_TIMES: + case INTRINSIC_DIVIDE: + case INTRINSIC_POWER: ++ if (flag_logical_as_integer) ++ { ++ convert_logical_to_integer (op1); ++ convert_logical_to_integer (op2); ++ } ++ + if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts)) + { + gfc_type_convert_binary (e, 1); +@@ -4108,6 +4145,13 @@ resolve_operator (gfc_expr *e) + case INTRINSIC_OR: + case INTRINSIC_EQV: + case INTRINSIC_NEQV: ++ ++ if (flag_logical_as_integer) ++ { ++ convert_integer_to_logical (op1); ++ convert_integer_to_logical (op2); ++ } ++ + if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL) + { + e->ts.type = BT_LOGICAL; +@@ -4158,6 +4202,9 @@ resolve_operator (gfc_expr *e) + goto simplify_op; + } + ++ if (flag_logical_as_integer) ++ convert_integer_to_logical (op1); ++ + if (op1->ts.type == BT_LOGICAL) + { + e->ts.type = BT_LOGICAL; +@@ -4198,6 +4245,12 @@ resolve_operator (gfc_expr *e) + convert_hollerith_to_character (op2); + } + ++ if (flag_logical_as_integer) ++ { ++ convert_logical_to_integer (op1); ++ convert_logical_to_integer (op2); ++ } ++ + if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER + && op1->ts.kind == op2->ts.kind) + { +diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f +new file mode 100644 +index 00000000000..938a91d9e9a +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f +@@ -0,0 +1,31 @@ ++! { dg-do run } ++! { dg-options "-std=legacy -flogical-as-integer" } ++! ++! Test conversion between logical and integer for logical operators ++! ++! Test case contributed by Jim MacArthur ++! Modified for -flogical-as-integer by Mark Eggleston ++! ++! ++ PROGRAM logical_integer_conversion ++ LOGICAL lpos /.true./ ++ INTEGER ineg/0/ ++ INTEGER ires ++ LOGICAL lres ++ ++ ! Test Logicals converted to Integers ++ if ((lpos.AND.ineg).EQ.1) STOP 3 ++ if ((ineg.AND.lpos).NE.0) STOP 4 ++ ires = (.true..AND.0) ++ if (ires.NE.0) STOP 5 ++ ires = (1.AND..false.) ++ if (ires.EQ.1) STOP 6 ++ ++ ! Test Integers converted to Logicals ++ if (lpos.EQ.ineg) STOP 7 ++ if (ineg.EQ.lpos) STOP 8 ++ lres = (.true..EQ.0) ++ if (lres) STOP 9 ++ lres = (1.EQ..false.) ++ if (lres) STOP 10 ++ END +diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f +new file mode 100644 +index 00000000000..9f146202ba5 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f +@@ -0,0 +1,31 @@ ++! { dg-do compile } ++! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" } ++! ++! Based on logical_to_integer_and_vice_versa_1.f but with option disabled ++! to test for error messages. ++! ++! Test case contributed by by Mark Eggleston ++! ++! ++ PROGRAM logical_integer_conversion ++ LOGICAL lpos /.true./ ++ INTEGER ineg/0/ ++ INTEGER ires ++ LOGICAL lres ++ ++ ! Test Logicals converted to Integers ++ if ((lpos.AND.ineg).EQ.1) STOP 3 ! { dg-error "Operands of logical operator" } ++ if ((ineg.AND.lpos).NE.0) STOP 4 ! { dg-error "Operands of logical operator" } ++ ires = (.true..AND.0) ! { dg-error "Operands of logical operator" } ++ if (ires.NE.0) STOP 5 ++ ires = (1.AND..false.) ! { dg-error "Operands of logical operator" } ++ if (ires.EQ.1) STOP 6 ++ ++ ! Test Integers converted to Logicals ++ if (lpos.EQ.ineg) STOP 7 ! { dg-error "Operands of comparison operator" } ++ if (ineg.EQ.lpos) STOP 8 ! { dg-error "Operands of comparison operator" } ++ lres = (.true..EQ.0) ! { dg-error "Operands of comparison operator" } ++ if (lres) STOP 9 ++ lres = (1.EQ..false.) ! { dg-error "Operands of comparison operator" } ++ if (lres) STOP 10 ++ END +diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f +new file mode 100644 +index 00000000000..446873eb2dc +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f +@@ -0,0 +1,33 @@ ++! { dg-do compile } ++! { dg-options "-std=legacy -flogical-as-integer" } ++! ++! Test conversion between logical and integer for logical operators ++! ++ program test ++ logical f /.false./ ++ logical t /.true./ ++ real x ++ ++ x = 7.7 ++ x = x + t*3.0 ++ if (abs(x - 10.7).gt.0.00001) stop 1 ++ x = x + .false.*5.0 ++ if (abs(x - 10.7).gt.0.00001) stop 2 ++ x = x - .true.*5.0 ++ if (abs(x - 5.7).gt.0.00001) stop 3 ++ x = x + t ++ if (abs(x - 6.7).gt.0.00001) stop 4 ++ x = x + f ++ if (abs(x - 6.7).gt.0.00001) stop 5 ++ x = x - t ++ if (abs(x - 5.7).gt.0.00001) stop 6 ++ x = x - f ++ if (abs(x - 5.7).gt.0.00001) stop 7 ++ x = x**.true. ++ if (abs(x - 5.7).gt.0.00001) stop 8 ++ x = x**.false. ++ if (abs(x - 1.0).gt.0.00001) stop 9 ++ x = x/t ++ if (abs(x - 1.0).gt.0.00001) stop 10 ++ if ((x/.false.).le.huge(x)) stop 11 ++ end +diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f +new file mode 100644 +index 00000000000..4301a4988d8 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f +@@ -0,0 +1,33 @@ ++! { dg-do compile } ++! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" } ++! ++! Test conversion between logical and integer for logical operators ++! ++ program test ++ logical f /.false./ ++ logical t /.true./ ++ real x ++ ++ x = 7.7 ++ x = x + t*3.0 ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 10.7).gt.0.00001) stop 1 ++ x = x + .false.*5.0 ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 10.7).gt.0.00001) stop 2 ++ x = x - .true.*5.0 ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 5.7).gt.0.00001) stop 3 ++ x = x + t ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 6.7).gt.0.00001) stop 4 ++ x = x + f ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 6.7).gt.0.00001) stop 5 ++ x = x - t ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 5.7).gt.0.00001) stop 6 ++ x = x - f ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 5.7).gt.0.00001) stop 7 ++ x = x**.true. ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 5.7).gt.0.00001) stop 8 ++ x = x**.false. ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 1.0).gt.0.00001) stop 9 ++ x = x/t ! { dg-error "Operands of binary numeric" } ++ if (abs(x - 1.0).gt.0.00001) stop 10 ++ if ((x/.false.).le.huge(x)) stop 11 ! { dg-error "Operands of binary numeric" } ++ end +-- +2.27.0 + diff --git a/gcc13-hack.patch b/gcc13-hack.patch new file mode 100644 index 0000000..e98649e --- /dev/null +++ b/gcc13-hack.patch @@ -0,0 +1,126 @@ +--- libada/Makefile.in.jj 2019-01-09 13:01:18.015608205 +0100 ++++ libada/Makefile.in 2019-01-11 18:16:23.441726931 +0100 +@@ -71,18 +71,40 @@ version := $(shell @get_gcc_base_ver@ $( + libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR) + ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) + ++DEFAULTMULTIFLAGS := ++ifeq ($(MULTISUBDIR),) ++targ:=$(subst -, ,$(target)) ++arch:=$(word 1,$(targ)) ++ifeq ($(words $(targ)),2) ++osys:=$(word 2,$(targ)) ++else ++osys:=$(word 3,$(targ)) ++endif ++ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),) ++ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64) ++DEFAULTMULTIFLAGS := -m64 ++else ++ifeq ($(strip $(filter-out s390%, $(arch))),) ++DEFAULTMULTIFLAGS := -m31 ++else ++DEFAULTMULTIFLAGS := -m32 ++endif ++endif ++endif ++endif ++ + # exeext should not be used because it's the *host* exeext. We're building + # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus + # definitions just in case something slips through the safety net provided + # by recursive make invocations in gcc/ada/Makefile.in + LIBADA_FLAGS_TO_PASS = \ + "MAKEOVERRIDES=" \ +- "LDFLAGS=$(LDFLAGS)" \ ++ "LDFLAGS=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \ + "LN_S=$(LN_S)" \ + "SHELL=$(SHELL)" \ +- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \ +- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \ +- "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \ ++ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ ++ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ ++ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG)" \ + "THREAD_KIND=$(THREAD_KIND)" \ + "TRACE=$(TRACE)" \ +@@ -93,7 +115,7 @@ LIBADA_FLAGS_TO_PASS = \ + "exeext=.exeext.should.not.be.used " \ + 'CC=the.host.compiler.should.not.be.needed' \ + "GCC_FOR_TARGET=$(CC)" \ +- "CFLAGS=$(CFLAGS)" ++ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)" + + .PHONY: libada gnatlib gnatlib-shared gnatlib-sjlj gnatlib-zcx osconstool + +--- config-ml.in.jj 2019-01-09 12:50:16.646501448 +0100 ++++ config-ml.in 2019-01-11 18:16:23.442726914 +0100 +@@ -511,6 +511,8 @@ multi-do: + ADAFLAGS="$(ADAFLAGS) $${flags}" \ + prefix="$(prefix)" \ + exec_prefix="$(exec_prefix)" \ ++ mandir="$(mandir)" \ ++ infodir="$(infodir)" \ + GOCFLAGS="$(GOCFLAGS) $${flags}" \ + GDCFLAGS="$(GDCFLAGS) $${flags}" \ + CXXFLAGS="$(CXXFLAGS) $${flags}" \ +--- libcpp/macro.cc.jj 2019-01-09 13:01:21.420552123 +0100 ++++ libcpp/macro.cc 2019-01-11 18:18:17.736876285 +0100 +@@ -3256,8 +3256,6 @@ static cpp_macro * + create_iso_definition (cpp_reader *pfile) + { + bool following_paste_op = false; +- const char *paste_op_error_msg = +- N_("'##' cannot appear at either end of a macro expansion"); + unsigned int num_extra_tokens = 0; + unsigned nparms = 0; + cpp_hashnode **params = NULL; +@@ -3382,7 +3380,9 @@ create_iso_definition (cpp_reader *pfile + function-like macros, but not at the end. */ + if (following_paste_op) + { +- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg); ++ cpp_error (pfile, CPP_DL_ERROR, ++ "'##' cannot appear at either end of a macro " ++ "expansion"); + goto out; + } + if (!vaopt_tracker.completed ()) +@@ -3397,7 +3397,9 @@ create_iso_definition (cpp_reader *pfile + function-like macros, but not at the beginning. */ + if (macro->count == 1) + { +- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg); ++ cpp_error (pfile, CPP_DL_ERROR, ++ "'##' cannot appear at either end of a macro " ++ "expansion"); + goto out; + } + +--- libcpp/expr.cc.jj 2019-01-09 13:01:22.415535734 +0100 ++++ libcpp/expr.cc 2019-01-11 18:16:23.444726882 +0100 +@@ -803,16 +803,17 @@ cpp_classify_number (cpp_reader *pfile, + if ((result & CPP_N_WIDTH) == CPP_N_LARGE + && CPP_OPTION (pfile, cpp_warn_long_long)) + { +- const char *message = CPP_OPTION (pfile, cplusplus) +- ? N_("use of C++11 long long integer constant") +- : N_("use of C99 long long integer constant"); +- + if (CPP_OPTION (pfile, c99)) + cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location, +- 0, message); ++ 0, CPP_OPTION (pfile, cplusplus) ++ ? N_("use of C++11 long long integer constant") ++ : N_("use of C99 long long integer constant")); + else + cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG, +- virtual_location, 0, message); ++ virtual_location, 0, ++ CPP_OPTION (pfile, cplusplus) ++ ? N_("use of C++11 long long integer constant") ++ : N_("use of C99 long long integer constant")); + } + + if ((result & CPP_N_SIZE_T) == CPP_N_SIZE_T diff --git a/gcc13-isl-dl.patch b/gcc13-isl-dl.patch new file mode 100644 index 0000000..20dd8bf --- /dev/null +++ b/gcc13-isl-dl.patch @@ -0,0 +1,716 @@ +--- gcc/Makefile.in.jj 2015-06-06 10:00:25.000000000 +0200 ++++ gcc/Makefile.in 2015-11-04 14:56:02.643536437 +0100 +@@ -1063,7 +1063,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY) + # and the system's installed libraries. + LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \ + $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS) +-BACKENDLIBS = $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ ++BACKENDLIBS = $(if $(ISLLIBS),-ldl) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ + $(ZLIB) $(ZSTD_LIB) + # Any system libraries needed just for GNAT. + SYSLIBS = @GNAT_LIBEXC@ +@@ -2302,6 +2302,15 @@ $(out_object_file): $(out_file) + $(common_out_object_file): $(common_out_file) + $(COMPILE) $< + $(POSTCOMPILE) ++ ++graphite%.o : \ ++ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS)) ++graphite.o : \ ++ ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS)) ++graphite%.o : \ ++ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS)) ++graphite.o : \ ++ ALL_CXXFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CXXFLAGS)) + # + # Generate header and source files from the machine description, + # and compile them. +--- gcc/graphite.h.jj 2016-01-27 12:44:06.000000000 +0100 ++++ gcc/graphite.h 2022-11-03 19:14:50.369690720 +0100 +@@ -24,6 +24,591 @@ along with GCC; see the file COPYING3. + + #include "sese.h" + ++#include ++#include ++ ++#define DYNSYMS \ ++ DYNSYM (isl_aff_add_coefficient_si); \ ++ DYNSYM (isl_aff_free); \ ++ DYNSYM (isl_aff_get_space); \ ++ DYNSYM (isl_aff_set_coefficient_si); \ ++ DYNSYM (isl_aff_set_constant_si); \ ++ DYNSYM (isl_aff_zero_on_domain); \ ++ /* DYNSYM (isl_band_free); */ \ ++ /* DYNSYM (isl_band_get_children); */ \ ++ /* DYNSYM (isl_band_get_partial_schedule); */ \ ++ /* DYNSYM (isl_band_has_children); */ \ ++ /* DYNSYM (isl_band_list_free); */ \ ++ /* DYNSYM (isl_band_list_get_band); */ \ ++ /* DYNSYM (isl_band_list_get_ctx); */ \ ++ /* DYNSYM (isl_band_list_n_band); */ \ ++ /* DYNSYM (isl_band_n_member); */ \ ++ DYNSYM (isl_basic_map_add_constraint); \ ++ DYNSYM (isl_basic_map_project_out); \ ++ DYNSYM (isl_basic_map_universe); \ ++ DYNSYM (isl_constraint_set_coefficient_si); \ ++ DYNSYM (isl_constraint_set_constant_si); \ ++ DYNSYM (isl_ctx_alloc); \ ++ DYNSYM (isl_ctx_free); \ ++ DYNSYM (isl_equality_alloc); \ ++ DYNSYM (isl_id_alloc); \ ++ DYNSYM (isl_id_copy); \ ++ DYNSYM (isl_id_free); \ ++ DYNSYM (isl_inequality_alloc); \ ++ DYNSYM (isl_local_space_copy); \ ++ DYNSYM (isl_local_space_free); \ ++ DYNSYM (isl_local_space_from_space); \ ++ DYNSYM (isl_local_space_range); \ ++ DYNSYM (isl_map_add_constraint); \ ++ DYNSYM (isl_map_add_dims); \ ++ DYNSYM (isl_map_align_params); \ ++ DYNSYM (isl_map_apply_range); \ ++ DYNSYM (isl_map_copy); \ ++ DYNSYM (isl_map_dim); \ ++ DYNSYM (isl_map_dump); \ ++ DYNSYM (isl_map_equate); \ ++ DYNSYM (isl_map_fix_si); \ ++ DYNSYM (isl_map_flat_product); \ ++ DYNSYM (isl_map_flat_range_product); \ ++ DYNSYM (isl_map_free); \ ++ DYNSYM (isl_map_from_basic_map); \ ++ DYNSYM (isl_map_from_pw_aff); \ ++ DYNSYM (isl_map_from_union_map); \ ++ DYNSYM (isl_map_get_ctx); \ ++ DYNSYM (isl_map_get_space); \ ++ DYNSYM (isl_map_get_tuple_id); \ ++ DYNSYM (isl_map_insert_dims); \ ++ DYNSYM (isl_map_intersect); \ ++ DYNSYM (isl_map_intersect_domain); \ ++ DYNSYM (isl_map_intersect_range); \ ++ DYNSYM (isl_map_is_empty); \ ++ DYNSYM (isl_map_lex_ge); \ ++ DYNSYM (isl_map_lex_le); \ ++ /* DYNSYM (isl_map_n_out); */ \ ++ DYNSYM (isl_map_range); \ ++ DYNSYM (isl_map_set_tuple_id); \ ++ DYNSYM (isl_map_universe); \ ++ DYNSYM (isl_options_set_on_error); \ ++ DYNSYM (isl_options_set_schedule_serialize_sccs); \ ++ DYNSYM (isl_printer_set_yaml_style); \ ++ DYNSYM (isl_options_set_schedule_max_constant_term); \ ++ DYNSYM (isl_options_set_schedule_maximize_band_depth); \ ++ DYNSYM (isl_printer_free); \ ++ DYNSYM (isl_printer_print_aff); \ ++ DYNSYM (isl_printer_print_constraint); \ ++ DYNSYM (isl_printer_print_map); \ ++ DYNSYM (isl_printer_print_set); \ ++ DYNSYM (isl_printer_to_file); \ ++ DYNSYM (isl_pw_aff_add); \ ++ DYNSYM (isl_pw_aff_alloc); \ ++ DYNSYM (isl_pw_aff_copy); \ ++ DYNSYM (isl_pw_aff_eq_set); \ ++ DYNSYM (isl_pw_aff_free); \ ++ DYNSYM (isl_pw_aff_from_aff); \ ++ DYNSYM (isl_pw_aff_ge_set); \ ++ DYNSYM (isl_pw_aff_gt_set); \ ++ DYNSYM (isl_pw_aff_is_cst); \ ++ DYNSYM (isl_pw_aff_le_set); \ ++ DYNSYM (isl_pw_aff_lt_set); \ ++ DYNSYM (isl_pw_aff_mul); \ ++ DYNSYM (isl_pw_aff_ne_set); \ ++ DYNSYM (isl_pw_aff_nonneg_set); \ ++ DYNSYM (isl_pw_aff_set_tuple_id); \ ++ DYNSYM (isl_pw_aff_sub); \ ++ DYNSYM (isl_pw_aff_zero_set); \ ++ DYNSYM (isl_schedule_free); \ ++ /* DYNSYM (isl_schedule_get_band_forest); */ \ ++ DYNSYM (isl_set_add_constraint); \ ++ DYNSYM (isl_set_add_dims); \ ++ DYNSYM (isl_set_apply); \ ++ DYNSYM (isl_set_coalesce); \ ++ DYNSYM (isl_set_copy); \ ++ DYNSYM (isl_set_dim); \ ++ DYNSYM (isl_set_fix_si); \ ++ DYNSYM (isl_set_free); \ ++ DYNSYM (isl_set_get_space); \ ++ DYNSYM (isl_set_get_tuple_id); \ ++ DYNSYM (isl_set_intersect); \ ++ DYNSYM (isl_set_is_empty); \ ++ DYNSYM (isl_set_n_dim); \ ++ DYNSYM (isl_set_nat_universe); \ ++ DYNSYM (isl_set_project_out); \ ++ DYNSYM (isl_set_set_tuple_id); \ ++ DYNSYM (isl_set_universe); \ ++ DYNSYM (isl_space_add_dims); \ ++ DYNSYM (isl_space_alloc); \ ++ DYNSYM (isl_space_copy); \ ++ DYNSYM (isl_space_dim); \ ++ DYNSYM (isl_space_domain); \ ++ DYNSYM (isl_space_find_dim_by_id); \ ++ DYNSYM (isl_space_free); \ ++ DYNSYM (isl_space_from_domain); \ ++ DYNSYM (isl_space_get_tuple_id); \ ++ DYNSYM (isl_space_params_alloc); \ ++ DYNSYM (isl_space_range); \ ++ DYNSYM (isl_space_set_alloc); \ ++ DYNSYM (isl_space_set_dim_id); \ ++ DYNSYM (isl_space_set_tuple_id); \ ++ DYNSYM (isl_union_map_add_map); \ ++ DYNSYM (isl_union_map_align_params); \ ++ DYNSYM (isl_union_map_apply_domain); \ ++ DYNSYM (isl_union_map_apply_range); \ ++ DYNSYM (isl_union_map_compute_flow); \ ++ DYNSYM (isl_union_map_copy); \ ++ DYNSYM (isl_union_map_empty); \ ++ DYNSYM (isl_union_map_flat_range_product); \ ++ DYNSYM (isl_union_map_foreach_map); \ ++ DYNSYM (isl_union_map_free); \ ++ DYNSYM (isl_union_map_from_map); \ ++ DYNSYM (isl_union_map_get_ctx); \ ++ DYNSYM (isl_union_map_get_space); \ ++ DYNSYM (isl_union_map_gist_domain); \ ++ DYNSYM (isl_union_map_gist_range); \ ++ DYNSYM (isl_union_map_intersect_domain); \ ++ DYNSYM (isl_union_map_is_empty); \ ++ DYNSYM (isl_union_map_subtract); \ ++ DYNSYM (isl_union_map_union); \ ++ DYNSYM (isl_union_set_add_set); \ ++ DYNSYM (isl_union_set_compute_schedule); \ ++ DYNSYM (isl_union_set_copy); \ ++ DYNSYM (isl_union_set_empty); \ ++ DYNSYM (isl_union_set_from_set); \ ++ DYNSYM (isl_aff_add_constant_val); \ ++ DYNSYM (isl_aff_get_coefficient_val); \ ++ DYNSYM (isl_aff_get_ctx); \ ++ DYNSYM (isl_aff_mod_val); \ ++ DYNSYM (isl_ast_build_ast_from_schedule); \ ++ DYNSYM (isl_ast_build_free); \ ++ DYNSYM (isl_ast_build_from_context); \ ++ DYNSYM (isl_ast_build_get_ctx); \ ++ DYNSYM (isl_ast_build_get_schedule); \ ++ DYNSYM (isl_ast_build_get_schedule_space); \ ++ DYNSYM (isl_ast_build_set_before_each_for); \ ++ DYNSYM (isl_ast_build_set_options); \ ++ DYNSYM (isl_ast_expr_free); \ ++ DYNSYM (isl_ast_expr_from_val); \ ++ DYNSYM (isl_ast_expr_get_ctx); \ ++ DYNSYM (isl_ast_expr_get_id); \ ++ DYNSYM (isl_ast_expr_get_op_arg); \ ++ DYNSYM (isl_ast_expr_get_op_n_arg); \ ++ DYNSYM (isl_ast_expr_get_op_type); \ ++ DYNSYM (isl_ast_expr_get_type); \ ++ DYNSYM (isl_ast_expr_get_val); \ ++ DYNSYM (isl_ast_expr_sub); \ ++ DYNSYM (isl_ast_node_block_get_children); \ ++ DYNSYM (isl_ast_node_for_get_body); \ ++ DYNSYM (isl_ast_node_for_get_cond); \ ++ DYNSYM (isl_ast_node_for_get_inc); \ ++ DYNSYM (isl_ast_node_for_get_init); \ ++ DYNSYM (isl_ast_node_for_get_iterator); \ ++ DYNSYM (isl_ast_node_free); \ ++ DYNSYM (isl_ast_node_get_annotation); \ ++ DYNSYM (isl_ast_node_get_type); \ ++ DYNSYM (isl_ast_node_if_get_cond); \ ++ DYNSYM (isl_ast_node_if_get_else); \ ++ DYNSYM (isl_ast_node_if_get_then); \ ++ DYNSYM (isl_ast_node_list_free); \ ++ DYNSYM (isl_ast_node_list_get_ast_node); \ ++ DYNSYM (isl_ast_node_list_n_ast_node); \ ++ DYNSYM (isl_ast_node_user_get_expr); \ ++ DYNSYM (isl_constraint_set_coefficient_val); \ ++ DYNSYM (isl_constraint_set_constant_val); \ ++ DYNSYM (isl_id_get_user); \ ++ DYNSYM (isl_local_space_get_ctx); \ ++ DYNSYM (isl_map_fix_val); \ ++ DYNSYM (isl_options_set_ast_build_atomic_upper_bound); \ ++ DYNSYM (isl_printer_print_ast_node); \ ++ DYNSYM (isl_printer_print_str); \ ++ DYNSYM (isl_printer_set_output_format); \ ++ DYNSYM (isl_pw_aff_mod_val); \ ++ DYNSYM (isl_schedule_constraints_compute_schedule); \ ++ DYNSYM (isl_schedule_constraints_on_domain); \ ++ DYNSYM (isl_schedule_constraints_set_coincidence); \ ++ DYNSYM (isl_schedule_constraints_set_proximity); \ ++ DYNSYM (isl_schedule_constraints_set_validity); \ ++ DYNSYM (isl_set_get_dim_id); \ ++ DYNSYM (isl_set_max_val); \ ++ DYNSYM (isl_set_min_val); \ ++ DYNSYM (isl_set_params); \ ++ DYNSYM (isl_space_align_params); \ ++ DYNSYM (isl_space_map_from_domain_and_range); \ ++ DYNSYM (isl_space_set_tuple_name); \ ++ DYNSYM (isl_space_wrap); \ ++ DYNSYM (isl_union_map_from_domain_and_range); \ ++ DYNSYM (isl_union_map_range); \ ++ DYNSYM (isl_union_set_union); \ ++ DYNSYM (isl_union_set_universe); \ ++ DYNSYM (isl_val_2exp); \ ++ DYNSYM (isl_val_add_ui); \ ++ DYNSYM (isl_val_copy); \ ++ DYNSYM (isl_val_free); \ ++ DYNSYM (isl_val_int_from_si); \ ++ DYNSYM (isl_val_int_from_ui); \ ++ DYNSYM (isl_val_mul); \ ++ DYNSYM (isl_val_neg); \ ++ DYNSYM (isl_val_sub); \ ++ DYNSYM (isl_printer_print_union_map); \ ++ DYNSYM (isl_pw_aff_get_ctx); \ ++ DYNSYM (isl_val_is_int); \ ++ DYNSYM (isl_ctx_get_max_operations); \ ++ DYNSYM (isl_ctx_set_max_operations); \ ++ DYNSYM (isl_ctx_last_error); \ ++ DYNSYM (isl_ctx_reset_operations); \ ++ DYNSYM (isl_map_coalesce); \ ++ DYNSYM (isl_printer_print_schedule); \ ++ DYNSYM (isl_set_set_dim_id); \ ++ DYNSYM (isl_union_map_coalesce); \ ++ DYNSYM (isl_multi_val_set_val); \ ++ DYNSYM (isl_multi_val_zero); \ ++ DYNSYM (isl_options_set_schedule_max_coefficient); \ ++ DYNSYM (isl_options_set_tile_scale_tile_loops); \ ++ DYNSYM (isl_schedule_copy); \ ++ DYNSYM (isl_schedule_get_map); \ ++ DYNSYM (isl_schedule_map_schedule_node_bottom_up); \ ++ DYNSYM (isl_schedule_node_band_get_permutable); \ ++ DYNSYM (isl_schedule_node_band_get_space); \ ++ DYNSYM (isl_schedule_node_band_tile); \ ++ DYNSYM (isl_schedule_node_child); \ ++ DYNSYM (isl_schedule_node_free); \ ++ DYNSYM (isl_schedule_node_get_child); \ ++ DYNSYM (isl_schedule_node_get_ctx); \ ++ DYNSYM (isl_schedule_node_get_type); \ ++ DYNSYM (isl_schedule_node_n_children); \ ++ DYNSYM (isl_union_map_is_equal); \ ++ DYNSYM (isl_union_access_info_compute_flow); \ ++ DYNSYM (isl_union_access_info_from_sink); \ ++ DYNSYM (isl_union_access_info_set_may_source); \ ++ DYNSYM (isl_union_access_info_set_must_source); \ ++ DYNSYM (isl_union_access_info_set_schedule); \ ++ DYNSYM (isl_union_flow_free); \ ++ DYNSYM (isl_union_flow_get_may_dependence); \ ++ DYNSYM (isl_union_flow_get_must_dependence); \ ++ DYNSYM (isl_aff_var_on_domain); \ ++ DYNSYM (isl_multi_aff_from_aff); \ ++ DYNSYM (isl_schedule_get_ctx); \ ++ DYNSYM (isl_multi_aff_set_tuple_id); \ ++ DYNSYM (isl_multi_aff_dim); \ ++ DYNSYM (isl_schedule_get_domain); \ ++ DYNSYM (isl_union_set_is_empty); \ ++ DYNSYM (isl_union_set_get_space); \ ++ DYNSYM (isl_union_pw_multi_aff_empty); \ ++ DYNSYM (isl_union_set_foreach_set); \ ++ DYNSYM (isl_union_set_free); \ ++ DYNSYM (isl_multi_union_pw_aff_from_union_pw_multi_aff); \ ++ DYNSYM (isl_multi_union_pw_aff_apply_multi_aff); \ ++ DYNSYM (isl_schedule_insert_partial_schedule); \ ++ DYNSYM (isl_union_pw_multi_aff_free); \ ++ DYNSYM (isl_pw_multi_aff_project_out_map); \ ++ DYNSYM (isl_union_pw_multi_aff_add_pw_multi_aff); \ ++ DYNSYM (isl_schedule_from_domain); \ ++ DYNSYM (isl_schedule_sequence); \ ++ DYNSYM (isl_ast_build_node_from_schedule); \ ++ DYNSYM (isl_ast_node_mark_get_node); \ ++ DYNSYM (isl_schedule_node_band_member_get_ast_loop_type); \ ++ DYNSYM (isl_schedule_node_band_member_set_ast_loop_type); \ ++ DYNSYM (isl_val_n_abs_num_chunks); \ ++ DYNSYM (isl_val_get_abs_num_chunks); \ ++ DYNSYM (isl_val_int_from_chunks); \ ++ DYNSYM (isl_val_is_neg); \ ++ DYNSYM (isl_version); \ ++ DYNSYM (isl_options_get_on_error); \ ++ DYNSYM (isl_ctx_reset_error); ++ ++extern struct isl_pointers_s__ ++{ ++ bool inited; ++ void *h; ++#define DYNSYM(x) __typeof (x) *p_##x ++ DYNSYMS ++#undef DYNSYM ++} isl_pointers__; ++ ++#define isl_aff_add_coefficient_si (*isl_pointers__.p_isl_aff_add_coefficient_si) ++#define isl_aff_free (*isl_pointers__.p_isl_aff_free) ++#define isl_aff_get_space (*isl_pointers__.p_isl_aff_get_space) ++#define isl_aff_set_coefficient_si (*isl_pointers__.p_isl_aff_set_coefficient_si) ++#define isl_aff_set_constant_si (*isl_pointers__.p_isl_aff_set_constant_si) ++#define isl_aff_zero_on_domain (*isl_pointers__.p_isl_aff_zero_on_domain) ++#define isl_band_free (*isl_pointers__.p_isl_band_free) ++#define isl_band_get_children (*isl_pointers__.p_isl_band_get_children) ++#define isl_band_get_partial_schedule (*isl_pointers__.p_isl_band_get_partial_schedule) ++#define isl_band_has_children (*isl_pointers__.p_isl_band_has_children) ++#define isl_band_list_free (*isl_pointers__.p_isl_band_list_free) ++#define isl_band_list_get_band (*isl_pointers__.p_isl_band_list_get_band) ++#define isl_band_list_get_ctx (*isl_pointers__.p_isl_band_list_get_ctx) ++#define isl_band_list_n_band (*isl_pointers__.p_isl_band_list_n_band) ++#define isl_band_n_member (*isl_pointers__.p_isl_band_n_member) ++#define isl_basic_map_add_constraint (*isl_pointers__.p_isl_basic_map_add_constraint) ++#define isl_basic_map_project_out (*isl_pointers__.p_isl_basic_map_project_out) ++#define isl_basic_map_universe (*isl_pointers__.p_isl_basic_map_universe) ++#define isl_constraint_set_coefficient_si (*isl_pointers__.p_isl_constraint_set_coefficient_si) ++#define isl_constraint_set_constant_si (*isl_pointers__.p_isl_constraint_set_constant_si) ++#define isl_ctx_alloc (*isl_pointers__.p_isl_ctx_alloc) ++#define isl_ctx_free (*isl_pointers__.p_isl_ctx_free) ++#define isl_equality_alloc (*isl_pointers__.p_isl_equality_alloc) ++#define isl_id_alloc (*isl_pointers__.p_isl_id_alloc) ++#define isl_id_copy (*isl_pointers__.p_isl_id_copy) ++#define isl_id_free (*isl_pointers__.p_isl_id_free) ++#define isl_inequality_alloc (*isl_pointers__.p_isl_inequality_alloc) ++#define isl_local_space_copy (*isl_pointers__.p_isl_local_space_copy) ++#define isl_local_space_free (*isl_pointers__.p_isl_local_space_free) ++#define isl_local_space_from_space (*isl_pointers__.p_isl_local_space_from_space) ++#define isl_local_space_range (*isl_pointers__.p_isl_local_space_range) ++#define isl_map_add_constraint (*isl_pointers__.p_isl_map_add_constraint) ++#define isl_map_add_dims (*isl_pointers__.p_isl_map_add_dims) ++#define isl_map_align_params (*isl_pointers__.p_isl_map_align_params) ++#define isl_map_apply_range (*isl_pointers__.p_isl_map_apply_range) ++#define isl_map_copy (*isl_pointers__.p_isl_map_copy) ++#define isl_map_dim (*isl_pointers__.p_isl_map_dim) ++#define isl_map_dump (*isl_pointers__.p_isl_map_dump) ++#define isl_map_equate (*isl_pointers__.p_isl_map_equate) ++#define isl_map_fix_si (*isl_pointers__.p_isl_map_fix_si) ++#define isl_map_flat_product (*isl_pointers__.p_isl_map_flat_product) ++#define isl_map_flat_range_product (*isl_pointers__.p_isl_map_flat_range_product) ++#define isl_map_free (*isl_pointers__.p_isl_map_free) ++#define isl_map_from_basic_map (*isl_pointers__.p_isl_map_from_basic_map) ++#define isl_map_from_pw_aff (*isl_pointers__.p_isl_map_from_pw_aff) ++#define isl_map_from_union_map (*isl_pointers__.p_isl_map_from_union_map) ++#define isl_map_get_ctx (*isl_pointers__.p_isl_map_get_ctx) ++#define isl_map_get_space (*isl_pointers__.p_isl_map_get_space) ++#define isl_map_get_tuple_id (*isl_pointers__.p_isl_map_get_tuple_id) ++#define isl_map_insert_dims (*isl_pointers__.p_isl_map_insert_dims) ++#define isl_map_intersect (*isl_pointers__.p_isl_map_intersect) ++#define isl_map_intersect_domain (*isl_pointers__.p_isl_map_intersect_domain) ++#define isl_map_intersect_range (*isl_pointers__.p_isl_map_intersect_range) ++#define isl_map_is_empty (*isl_pointers__.p_isl_map_is_empty) ++#define isl_map_lex_ge (*isl_pointers__.p_isl_map_lex_ge) ++#define isl_map_lex_le (*isl_pointers__.p_isl_map_lex_le) ++#define isl_map_n_out (*isl_pointers__.p_isl_map_n_out) ++#define isl_map_range (*isl_pointers__.p_isl_map_range) ++#define isl_map_set_tuple_id (*isl_pointers__.p_isl_map_set_tuple_id) ++#define isl_map_universe (*isl_pointers__.p_isl_map_universe) ++#define isl_options_set_on_error (*isl_pointers__.p_isl_options_set_on_error) ++#define isl_options_set_schedule_serialize_sccs (*isl_pointers__.p_isl_options_set_schedule_serialize_sccs) ++#define isl_printer_set_yaml_style (*isl_pointers__.p_isl_printer_set_yaml_style) ++#define isl_options_set_schedule_max_constant_term (*isl_pointers__.p_isl_options_set_schedule_max_constant_term) ++#define isl_options_set_schedule_maximize_band_depth (*isl_pointers__.p_isl_options_set_schedule_maximize_band_depth) ++#define isl_printer_free (*isl_pointers__.p_isl_printer_free) ++#define isl_printer_print_aff (*isl_pointers__.p_isl_printer_print_aff) ++#define isl_printer_print_constraint (*isl_pointers__.p_isl_printer_print_constraint) ++#define isl_printer_print_map (*isl_pointers__.p_isl_printer_print_map) ++#define isl_printer_print_set (*isl_pointers__.p_isl_printer_print_set) ++#define isl_printer_to_file (*isl_pointers__.p_isl_printer_to_file) ++#define isl_pw_aff_add (*isl_pointers__.p_isl_pw_aff_add) ++#define isl_pw_aff_alloc (*isl_pointers__.p_isl_pw_aff_alloc) ++#define isl_pw_aff_copy (*isl_pointers__.p_isl_pw_aff_copy) ++#define isl_pw_aff_eq_set (*isl_pointers__.p_isl_pw_aff_eq_set) ++#define isl_pw_aff_free (*isl_pointers__.p_isl_pw_aff_free) ++#define isl_pw_aff_from_aff (*isl_pointers__.p_isl_pw_aff_from_aff) ++#define isl_pw_aff_ge_set (*isl_pointers__.p_isl_pw_aff_ge_set) ++#define isl_pw_aff_gt_set (*isl_pointers__.p_isl_pw_aff_gt_set) ++#define isl_pw_aff_is_cst (*isl_pointers__.p_isl_pw_aff_is_cst) ++#define isl_pw_aff_le_set (*isl_pointers__.p_isl_pw_aff_le_set) ++#define isl_pw_aff_lt_set (*isl_pointers__.p_isl_pw_aff_lt_set) ++#define isl_pw_aff_mul (*isl_pointers__.p_isl_pw_aff_mul) ++#define isl_pw_aff_ne_set (*isl_pointers__.p_isl_pw_aff_ne_set) ++#define isl_pw_aff_nonneg_set (*isl_pointers__.p_isl_pw_aff_nonneg_set) ++#define isl_pw_aff_set_tuple_id (*isl_pointers__.p_isl_pw_aff_set_tuple_id) ++#define isl_pw_aff_sub (*isl_pointers__.p_isl_pw_aff_sub) ++#define isl_pw_aff_zero_set (*isl_pointers__.p_isl_pw_aff_zero_set) ++#define isl_schedule_free (*isl_pointers__.p_isl_schedule_free) ++#define isl_schedule_get_band_forest (*isl_pointers__.p_isl_schedule_get_band_forest) ++#define isl_set_add_constraint (*isl_pointers__.p_isl_set_add_constraint) ++#define isl_set_add_dims (*isl_pointers__.p_isl_set_add_dims) ++#define isl_set_apply (*isl_pointers__.p_isl_set_apply) ++#define isl_set_coalesce (*isl_pointers__.p_isl_set_coalesce) ++#define isl_set_copy (*isl_pointers__.p_isl_set_copy) ++#define isl_set_dim (*isl_pointers__.p_isl_set_dim) ++#define isl_set_fix_si (*isl_pointers__.p_isl_set_fix_si) ++#define isl_set_free (*isl_pointers__.p_isl_set_free) ++#define isl_set_get_space (*isl_pointers__.p_isl_set_get_space) ++#define isl_set_get_tuple_id (*isl_pointers__.p_isl_set_get_tuple_id) ++#define isl_set_intersect (*isl_pointers__.p_isl_set_intersect) ++#define isl_set_is_empty (*isl_pointers__.p_isl_set_is_empty) ++#define isl_set_n_dim (*isl_pointers__.p_isl_set_n_dim) ++#define isl_set_nat_universe (*isl_pointers__.p_isl_set_nat_universe) ++#define isl_set_project_out (*isl_pointers__.p_isl_set_project_out) ++#define isl_set_set_tuple_id (*isl_pointers__.p_isl_set_set_tuple_id) ++#define isl_set_universe (*isl_pointers__.p_isl_set_universe) ++#define isl_space_add_dims (*isl_pointers__.p_isl_space_add_dims) ++#define isl_space_alloc (*isl_pointers__.p_isl_space_alloc) ++#define isl_space_copy (*isl_pointers__.p_isl_space_copy) ++#define isl_space_dim (*isl_pointers__.p_isl_space_dim) ++#define isl_space_domain (*isl_pointers__.p_isl_space_domain) ++#define isl_space_find_dim_by_id (*isl_pointers__.p_isl_space_find_dim_by_id) ++#define isl_space_free (*isl_pointers__.p_isl_space_free) ++#define isl_space_from_domain (*isl_pointers__.p_isl_space_from_domain) ++#define isl_space_get_tuple_id (*isl_pointers__.p_isl_space_get_tuple_id) ++#define isl_space_params_alloc (*isl_pointers__.p_isl_space_params_alloc) ++#define isl_space_range (*isl_pointers__.p_isl_space_range) ++#define isl_space_set_alloc (*isl_pointers__.p_isl_space_set_alloc) ++#define isl_space_set_dim_id (*isl_pointers__.p_isl_space_set_dim_id) ++#define isl_space_set_tuple_id (*isl_pointers__.p_isl_space_set_tuple_id) ++#define isl_union_map_add_map (*isl_pointers__.p_isl_union_map_add_map) ++#define isl_union_map_align_params (*isl_pointers__.p_isl_union_map_align_params) ++#define isl_union_map_apply_domain (*isl_pointers__.p_isl_union_map_apply_domain) ++#define isl_union_map_apply_range (*isl_pointers__.p_isl_union_map_apply_range) ++#define isl_union_map_compute_flow (*isl_pointers__.p_isl_union_map_compute_flow) ++#define isl_union_map_copy (*isl_pointers__.p_isl_union_map_copy) ++#define isl_union_map_empty (*isl_pointers__.p_isl_union_map_empty) ++#define isl_union_map_flat_range_product (*isl_pointers__.p_isl_union_map_flat_range_product) ++#define isl_union_map_foreach_map (*isl_pointers__.p_isl_union_map_foreach_map) ++#define isl_union_map_free (*isl_pointers__.p_isl_union_map_free) ++#define isl_union_map_from_map (*isl_pointers__.p_isl_union_map_from_map) ++#define isl_union_map_get_ctx (*isl_pointers__.p_isl_union_map_get_ctx) ++#define isl_union_map_get_space (*isl_pointers__.p_isl_union_map_get_space) ++#define isl_union_map_gist_domain (*isl_pointers__.p_isl_union_map_gist_domain) ++#define isl_union_map_gist_range (*isl_pointers__.p_isl_union_map_gist_range) ++#define isl_union_map_intersect_domain (*isl_pointers__.p_isl_union_map_intersect_domain) ++#define isl_union_map_is_empty (*isl_pointers__.p_isl_union_map_is_empty) ++#define isl_union_map_subtract (*isl_pointers__.p_isl_union_map_subtract) ++#define isl_union_map_union (*isl_pointers__.p_isl_union_map_union) ++#define isl_union_set_add_set (*isl_pointers__.p_isl_union_set_add_set) ++#define isl_union_set_compute_schedule (*isl_pointers__.p_isl_union_set_compute_schedule) ++#define isl_union_set_copy (*isl_pointers__.p_isl_union_set_copy) ++#define isl_union_set_empty (*isl_pointers__.p_isl_union_set_empty) ++#define isl_union_set_from_set (*isl_pointers__.p_isl_union_set_from_set) ++#define isl_aff_add_constant_val (*isl_pointers__.p_isl_aff_add_constant_val) ++#define isl_aff_get_coefficient_val (*isl_pointers__.p_isl_aff_get_coefficient_val) ++#define isl_aff_get_ctx (*isl_pointers__.p_isl_aff_get_ctx) ++#define isl_aff_mod_val (*isl_pointers__.p_isl_aff_mod_val) ++#define isl_ast_build_ast_from_schedule (*isl_pointers__.p_isl_ast_build_ast_from_schedule) ++#define isl_ast_build_free (*isl_pointers__.p_isl_ast_build_free) ++#define isl_ast_build_from_context (*isl_pointers__.p_isl_ast_build_from_context) ++#define isl_ast_build_get_ctx (*isl_pointers__.p_isl_ast_build_get_ctx) ++#define isl_ast_build_get_schedule (*isl_pointers__.p_isl_ast_build_get_schedule) ++#define isl_ast_build_get_schedule_space (*isl_pointers__.p_isl_ast_build_get_schedule_space) ++#define isl_ast_build_set_before_each_for (*isl_pointers__.p_isl_ast_build_set_before_each_for) ++#define isl_ast_build_set_options (*isl_pointers__.p_isl_ast_build_set_options) ++#define isl_ast_expr_free (*isl_pointers__.p_isl_ast_expr_free) ++#define isl_ast_expr_from_val (*isl_pointers__.p_isl_ast_expr_from_val) ++#define isl_ast_expr_get_ctx (*isl_pointers__.p_isl_ast_expr_get_ctx) ++#define isl_ast_expr_get_id (*isl_pointers__.p_isl_ast_expr_get_id) ++#define isl_ast_expr_get_op_arg (*isl_pointers__.p_isl_ast_expr_get_op_arg) ++#define isl_ast_expr_get_op_n_arg (*isl_pointers__.p_isl_ast_expr_get_op_n_arg) ++#define isl_ast_expr_get_op_type (*isl_pointers__.p_isl_ast_expr_get_op_type) ++#define isl_ast_expr_get_type (*isl_pointers__.p_isl_ast_expr_get_type) ++#define isl_ast_expr_get_val (*isl_pointers__.p_isl_ast_expr_get_val) ++#define isl_ast_expr_sub (*isl_pointers__.p_isl_ast_expr_sub) ++#define isl_ast_node_block_get_children (*isl_pointers__.p_isl_ast_node_block_get_children) ++#define isl_ast_node_for_get_body (*isl_pointers__.p_isl_ast_node_for_get_body) ++#define isl_ast_node_for_get_cond (*isl_pointers__.p_isl_ast_node_for_get_cond) ++#define isl_ast_node_for_get_inc (*isl_pointers__.p_isl_ast_node_for_get_inc) ++#define isl_ast_node_for_get_init (*isl_pointers__.p_isl_ast_node_for_get_init) ++#define isl_ast_node_for_get_iterator (*isl_pointers__.p_isl_ast_node_for_get_iterator) ++#define isl_ast_node_free (*isl_pointers__.p_isl_ast_node_free) ++#define isl_ast_node_get_annotation (*isl_pointers__.p_isl_ast_node_get_annotation) ++#define isl_ast_node_get_type (*isl_pointers__.p_isl_ast_node_get_type) ++#define isl_ast_node_if_get_cond (*isl_pointers__.p_isl_ast_node_if_get_cond) ++#define isl_ast_node_if_get_else (*isl_pointers__.p_isl_ast_node_if_get_else) ++#define isl_ast_node_if_get_then (*isl_pointers__.p_isl_ast_node_if_get_then) ++#define isl_ast_node_list_free (*isl_pointers__.p_isl_ast_node_list_free) ++#define isl_ast_node_list_get_ast_node (*isl_pointers__.p_isl_ast_node_list_get_ast_node) ++#define isl_ast_node_list_n_ast_node (*isl_pointers__.p_isl_ast_node_list_n_ast_node) ++#define isl_ast_node_user_get_expr (*isl_pointers__.p_isl_ast_node_user_get_expr) ++#define isl_constraint_set_coefficient_val (*isl_pointers__.p_isl_constraint_set_coefficient_val) ++#define isl_constraint_set_constant_val (*isl_pointers__.p_isl_constraint_set_constant_val) ++#define isl_id_get_user (*isl_pointers__.p_isl_id_get_user) ++#define isl_local_space_get_ctx (*isl_pointers__.p_isl_local_space_get_ctx) ++#define isl_map_fix_val (*isl_pointers__.p_isl_map_fix_val) ++#define isl_options_set_ast_build_atomic_upper_bound (*isl_pointers__.p_isl_options_set_ast_build_atomic_upper_bound) ++#define isl_printer_print_ast_node (*isl_pointers__.p_isl_printer_print_ast_node) ++#define isl_printer_print_str (*isl_pointers__.p_isl_printer_print_str) ++#define isl_printer_set_output_format (*isl_pointers__.p_isl_printer_set_output_format) ++#define isl_pw_aff_mod_val (*isl_pointers__.p_isl_pw_aff_mod_val) ++#define isl_schedule_constraints_compute_schedule (*isl_pointers__.p_isl_schedule_constraints_compute_schedule) ++#define isl_schedule_constraints_on_domain (*isl_pointers__.p_isl_schedule_constraints_on_domain) ++#define isl_schedule_constraints_set_coincidence (*isl_pointers__.p_isl_schedule_constraints_set_coincidence) ++#define isl_schedule_constraints_set_proximity (*isl_pointers__.p_isl_schedule_constraints_set_proximity) ++#define isl_schedule_constraints_set_validity (*isl_pointers__.p_isl_schedule_constraints_set_validity) ++#define isl_set_get_dim_id (*isl_pointers__.p_isl_set_get_dim_id) ++#define isl_set_max_val (*isl_pointers__.p_isl_set_max_val) ++#define isl_set_min_val (*isl_pointers__.p_isl_set_min_val) ++#define isl_set_params (*isl_pointers__.p_isl_set_params) ++#define isl_space_align_params (*isl_pointers__.p_isl_space_align_params) ++#define isl_space_map_from_domain_and_range (*isl_pointers__.p_isl_space_map_from_domain_and_range) ++#define isl_space_set_tuple_name (*isl_pointers__.p_isl_space_set_tuple_name) ++#define isl_space_wrap (*isl_pointers__.p_isl_space_wrap) ++#define isl_union_map_from_domain_and_range (*isl_pointers__.p_isl_union_map_from_domain_and_range) ++#define isl_union_map_range (*isl_pointers__.p_isl_union_map_range) ++#define isl_union_set_union (*isl_pointers__.p_isl_union_set_union) ++#define isl_union_set_universe (*isl_pointers__.p_isl_union_set_universe) ++#define isl_val_2exp (*isl_pointers__.p_isl_val_2exp) ++#define isl_val_add_ui (*isl_pointers__.p_isl_val_add_ui) ++#define isl_val_copy (*isl_pointers__.p_isl_val_copy) ++#define isl_val_free (*isl_pointers__.p_isl_val_free) ++#define isl_val_int_from_si (*isl_pointers__.p_isl_val_int_from_si) ++#define isl_val_int_from_ui (*isl_pointers__.p_isl_val_int_from_ui) ++#define isl_val_mul (*isl_pointers__.p_isl_val_mul) ++#define isl_val_neg (*isl_pointers__.p_isl_val_neg) ++#define isl_val_sub (*isl_pointers__.p_isl_val_sub) ++#define isl_printer_print_union_map (*isl_pointers__.p_isl_printer_print_union_map) ++#define isl_pw_aff_get_ctx (*isl_pointers__.p_isl_pw_aff_get_ctx) ++#define isl_val_is_int (*isl_pointers__.p_isl_val_is_int) ++#define isl_ctx_get_max_operations (*isl_pointers__.p_isl_ctx_get_max_operations) ++#define isl_ctx_set_max_operations (*isl_pointers__.p_isl_ctx_set_max_operations) ++#define isl_ctx_last_error (*isl_pointers__.p_isl_ctx_last_error) ++#define isl_ctx_reset_operations (*isl_pointers__.p_isl_ctx_reset_operations) ++#define isl_map_coalesce (*isl_pointers__.p_isl_map_coalesce) ++#define isl_printer_print_schedule (*isl_pointers__.p_isl_printer_print_schedule) ++#define isl_set_set_dim_id (*isl_pointers__.p_isl_set_set_dim_id) ++#define isl_union_map_coalesce (*isl_pointers__.p_isl_union_map_coalesce) ++#define isl_multi_val_set_val (*isl_pointers__.p_isl_multi_val_set_val) ++#define isl_multi_val_zero (*isl_pointers__.p_isl_multi_val_zero) ++#define isl_options_set_schedule_max_coefficient (*isl_pointers__.p_isl_options_set_schedule_max_coefficient) ++#define isl_options_set_tile_scale_tile_loops (*isl_pointers__.p_isl_options_set_tile_scale_tile_loops) ++#define isl_schedule_copy (*isl_pointers__.p_isl_schedule_copy) ++#define isl_schedule_get_map (*isl_pointers__.p_isl_schedule_get_map) ++#define isl_schedule_map_schedule_node_bottom_up (*isl_pointers__.p_isl_schedule_map_schedule_node_bottom_up) ++#define isl_schedule_node_band_get_permutable (*isl_pointers__.p_isl_schedule_node_band_get_permutable) ++#define isl_schedule_node_band_get_space (*isl_pointers__.p_isl_schedule_node_band_get_space) ++#define isl_schedule_node_band_tile (*isl_pointers__.p_isl_schedule_node_band_tile) ++#define isl_schedule_node_child (*isl_pointers__.p_isl_schedule_node_child) ++#define isl_schedule_node_free (*isl_pointers__.p_isl_schedule_node_free) ++#define isl_schedule_node_get_child (*isl_pointers__.p_isl_schedule_node_get_child) ++#define isl_schedule_node_get_ctx (*isl_pointers__.p_isl_schedule_node_get_ctx) ++#define isl_schedule_node_get_type (*isl_pointers__.p_isl_schedule_node_get_type) ++#define isl_schedule_node_n_children (*isl_pointers__.p_isl_schedule_node_n_children) ++#define isl_union_map_is_equal (*isl_pointers__.p_isl_union_map_is_equal) ++#define isl_union_access_info_compute_flow (*isl_pointers__.p_isl_union_access_info_compute_flow) ++#define isl_union_access_info_from_sink (*isl_pointers__.p_isl_union_access_info_from_sink) ++#define isl_union_access_info_set_may_source (*isl_pointers__.p_isl_union_access_info_set_may_source) ++#define isl_union_access_info_set_must_source (*isl_pointers__.p_isl_union_access_info_set_must_source) ++#define isl_union_access_info_set_schedule (*isl_pointers__.p_isl_union_access_info_set_schedule) ++#define isl_union_flow_free (*isl_pointers__.p_isl_union_flow_free) ++#define isl_union_flow_get_may_dependence (*isl_pointers__.p_isl_union_flow_get_may_dependence) ++#define isl_union_flow_get_must_dependence (*isl_pointers__.p_isl_union_flow_get_must_dependence) ++#define isl_aff_var_on_domain (*isl_pointers__.p_isl_aff_var_on_domain) ++#define isl_multi_aff_from_aff (*isl_pointers__.p_isl_multi_aff_from_aff) ++#define isl_schedule_get_ctx (*isl_pointers__.p_isl_schedule_get_ctx) ++#define isl_multi_aff_set_tuple_id (*isl_pointers__.p_isl_multi_aff_set_tuple_id) ++#define isl_multi_aff_dim (*isl_pointers__.p_isl_multi_aff_dim) ++#define isl_schedule_get_domain (*isl_pointers__.p_isl_schedule_get_domain) ++#define isl_union_set_is_empty (*isl_pointers__.p_isl_union_set_is_empty) ++#define isl_union_set_get_space (*isl_pointers__.p_isl_union_set_get_space) ++#define isl_union_pw_multi_aff_empty (*isl_pointers__.p_isl_union_pw_multi_aff_empty) ++#define isl_union_set_foreach_set (*isl_pointers__.p_isl_union_set_foreach_set) ++#define isl_union_set_free (*isl_pointers__.p_isl_union_set_free) ++#define isl_multi_union_pw_aff_from_union_pw_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_from_union_pw_multi_aff) ++#define isl_multi_union_pw_aff_apply_multi_aff (*isl_pointers__.p_isl_multi_union_pw_aff_apply_multi_aff) ++#define isl_schedule_insert_partial_schedule (*isl_pointers__.p_isl_schedule_insert_partial_schedule) ++#define isl_union_pw_multi_aff_free (*isl_pointers__.p_isl_union_pw_multi_aff_free) ++#define isl_pw_multi_aff_project_out_map (*isl_pointers__.p_isl_pw_multi_aff_project_out_map) ++#define isl_union_pw_multi_aff_add_pw_multi_aff (*isl_pointers__.p_isl_union_pw_multi_aff_add_pw_multi_aff) ++#define isl_schedule_from_domain (*isl_pointers__.p_isl_schedule_from_domain) ++#define isl_schedule_sequence (*isl_pointers__.p_isl_schedule_sequence) ++#define isl_ast_build_node_from_schedule (*isl_pointers__.p_isl_ast_build_node_from_schedule) ++#define isl_ast_node_mark_get_node (*isl_pointers__.p_isl_ast_node_mark_get_node) ++#define isl_schedule_node_band_member_get_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_get_ast_loop_type) ++#define isl_schedule_node_band_member_set_ast_loop_type (*isl_pointers__.p_isl_schedule_node_band_member_set_ast_loop_type) ++#define isl_val_n_abs_num_chunks (*isl_pointers__.p_isl_val_n_abs_num_chunks) ++#define isl_val_get_abs_num_chunks (*isl_pointers__.p_isl_val_get_abs_num_chunks) ++#define isl_val_int_from_chunks (*isl_pointers__.p_isl_val_int_from_chunks) ++#define isl_val_is_neg (*isl_pointers__.p_isl_val_is_neg) ++#define isl_version (*isl_pointers__.p_isl_version) ++#define isl_options_get_on_error (*isl_pointers__.p_isl_options_get_on_error) ++#define isl_ctx_reset_error (*isl_pointers__.p_isl_ctx_reset_error) ++ + typedef struct poly_dr *poly_dr_p; + + typedef struct poly_bb *poly_bb_p; +@@ -448,5 +1033,6 @@ extern tree cached_scalar_evolution_in_r + extern void dot_all_sese (FILE *, vec &); + extern void dot_sese (sese_l &); + extern void dot_cfg (); ++extern const char *get_isl_version (bool); + + #endif +--- gcc/graphite.cc.jj 2015-11-04 14:15:32.000000000 +0100 ++++ gcc/graphite.cc 2015-11-04 14:56:02.645536409 +0100 +@@ -60,6 +60,35 @@ along with GCC; see the file COPYING3. + #include "tree-ssa-propagate.h" + #include "graphite.h" + ++__typeof (isl_pointers__) isl_pointers__; ++ ++static bool ++init_isl_pointers (void) ++{ ++ void *h; ++ ++ if (isl_pointers__.inited) ++ return isl_pointers__.h != NULL; ++ h = dlopen ("libisl.so.23", RTLD_LAZY); ++ isl_pointers__.h = h; ++ if (h == NULL) ++ return false; ++#define DYNSYM(x) \ ++ do \ ++ { \ ++ union { __typeof (isl_pointers__.p_##x) p; void *q; } u; \ ++ u.q = dlsym (h, #x); \ ++ if (u.q == NULL) \ ++ return false; \ ++ isl_pointers__.p_##x = u.p; \ ++ } \ ++ while (0) ++ DYNSYMS ++#undef DYNSYM ++ isl_pointers__.inited = true; ++ return true; ++} ++ + /* Print global statistics to FILE. */ + + static void +@@ -424,6 +453,15 @@ graphite_transform_loops (void) + if (parallelized_function_p (cfun->decl)) + return; + ++ if (number_of_loops (cfun) <= 1) ++ return; ++ ++ if (!init_isl_pointers ()) ++ { ++ sorry ("Graphite loop optimizations cannot be used"); ++ return; ++ } ++ + calculate_dominance_info (CDI_DOMINATORS); + + /* We rely on post-dominators during merging of SESE regions so those +@@ -519,6 +557,14 @@ graphite_transform_loops (void) + } + } + ++const char * ++get_isl_version (bool force) ++{ ++ if (force) ++ init_isl_pointers (); ++ return (isl_pointers__.inited && isl_version) ? isl_version () : "none"; ++} ++ + #else /* If isl is not available: #ifndef HAVE_isl. */ + + static void +--- gcc/toplev.cc.jj 2017-02-19 13:02:31.000000000 +0100 ++++ gcc/toplev.cc 2017-02-19 16:50:25.536301350 +0100 +@@ -94,6 +94,7 @@ along with GCC; see the file COPYING3. + + #ifdef HAVE_isl + #include ++extern const char *get_isl_version (bool); + #endif + + static void general_init (const char *, bool); +@@ -683,7 +684,7 @@ print_version (FILE *file, const char *i + #ifndef HAVE_isl + "none" + #else +- isl_version () ++ get_isl_version (*indent == 0) + #endif + ); + if (strcmp (GCC_GMP_STRINGIFY_VERSION, gmp_version)) diff --git a/gcc13-isl-dl2.patch b/gcc13-isl-dl2.patch new file mode 100644 index 0000000..2e12499 --- /dev/null +++ b/gcc13-isl-dl2.patch @@ -0,0 +1,71 @@ +2011-04-04 Jakub Jelinek + + * toplev.cc (toplev_main_argv): New variable. + (toplev_main): Initialize it. + * graphite.cc (init_isl_pointers): Load libisl.so.23 from gcc's private + directory. + +--- gcc/toplev.cc.jj 2008-12-09 23:59:10.000000000 +0100 ++++ gcc/toplev.cc 2009-01-27 14:33:52.000000000 +0100 +@@ -113,6 +113,8 @@ static void finalize (bool); + static void crash_signal (int) ATTRIBUTE_NORETURN; + static void compile_file (void); + ++const char **toplev_main_argv; ++ + /* Decoded options, and number of such options. */ + struct cl_decoded_option *save_decoded_options; + unsigned int save_decoded_options_count; +@@ -2239,6 +2241,8 @@ toplev::main (int argc, char **argv) + + expandargv (&argc, &argv); + ++ toplev_main_argv = CONST_CAST2 (const char **, char **, argv); ++ + /* Initialization of GCC's environment, and diagnostics. */ + general_init (argv[0], m_init_signals); + +--- gcc/graphite.cc.jj 2010-12-01 10:24:32.000000000 -0500 ++++ gcc/graphite.cc 2010-12-01 11:46:07.832118193 -0500 +@@ -64,11 +64,39 @@ __typeof (isl_pointers__) isl_pointers__ + static bool + init_isl_pointers (void) + { +- void *h; ++ void *h = NULL; ++ extern const char **toplev_main_argv; ++ char *buf, *p; ++ size_t len; + + if (isl_pointers__.inited) + return isl_pointers__.h != NULL; +- h = dlopen ("libisl.so.23", RTLD_LAZY); ++ len = progname - toplev_main_argv[0]; ++ buf = XALLOCAVAR (char, len + sizeof "libisl.so.23"); ++ memcpy (buf, toplev_main_argv[0], len); ++ strcpy (buf + len, "libisl.so.23"); ++ len += sizeof "libisl.so.23"; ++ p = strstr (buf, "/libexec/"); ++ if (p != NULL) ++ { ++ while (1) ++ { ++ char *q = strstr (p + 8, "/libexec/"); ++ if (q == NULL) ++ break; ++ p = q; ++ } ++ memmove (p + 4, p + 8, len - (p + 8 - buf)); ++ h = dlopen (buf, RTLD_LAZY); ++ if (h == NULL) ++ { ++ len = progname - toplev_main_argv[0]; ++ memcpy (buf, toplev_main_argv[0], len); ++ strcpy (buf + len, "libisl.so.23"); ++ } ++ } ++ if (h == NULL) ++ h = dlopen (buf, RTLD_LAZY); + isl_pointers__.h = h; + if (h == NULL) + return false; diff --git a/gcc13-libgomp-omp_h-multilib.patch b/gcc13-libgomp-omp_h-multilib.patch new file mode 100644 index 0000000..d0e98d1 --- /dev/null +++ b/gcc13-libgomp-omp_h-multilib.patch @@ -0,0 +1,17 @@ +2008-06-09 Jakub Jelinek + + * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs. + +--- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200 ++++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200 +@@ -42,8 +42,8 @@ typedef struct + + typedef struct + { +- unsigned char _x[@OMP_NEST_LOCK_SIZE@] +- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@))); ++ unsigned char _x[8 + sizeof (void *)] ++ __attribute__((__aligned__(sizeof (void *)))); + } omp_nest_lock_t; + #endif + diff --git a/gcc13-libstdc++-docs.patch b/gcc13-libstdc++-docs.patch new file mode 100644 index 0000000..b6c2d50 --- /dev/null +++ b/gcc13-libstdc++-docs.patch @@ -0,0 +1,24 @@ +--- libstdc++-v3/doc/html/index.html.jj 2011-01-03 12:53:21.282829010 +0100 ++++ libstdc++-v3/doc/html/index.html 2011-01-04 18:06:28.999851145 +0100 +@@ -5,6 +5,8 @@ + FSF + +

++ Release 12.2.1 ++

+ Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation + License, Version 1.2 or any later version published by the +--- libstdc++-v3/doc/html/api.html.jj 2011-01-03 12:53:21.000000000 +0100 ++++ libstdc++-v3/doc/html/api.html 2011-01-04 18:12:01.672757784 +0100 +@@ -20,7 +20,9 @@ + member functions for the library classes, finding out what is in a + particular include file, looking at inheritance diagrams, etc. +

+- The API documentation, rendered into HTML, can be viewed online ++ The API documentation, rendered into HTML, can be viewed locally ++ for the 12.2.1 release, ++ online + for each GCC release + and + diff --git a/gcc13-libtool-no-rpath.patch b/gcc13-libtool-no-rpath.patch new file mode 100644 index 0000000..466c661 --- /dev/null +++ b/gcc13-libtool-no-rpath.patch @@ -0,0 +1,27 @@ +libtool sucks. +--- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100 ++++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200 +@@ -5394,6 +5394,7 @@ EOF + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then +@@ -6071,6 +6072,7 @@ EOF + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then +@@ -6120,6 +6122,7 @@ EOF + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then diff --git a/gcc13-no-add-needed.patch b/gcc13-no-add-needed.patch new file mode 100644 index 0000000..5817299 --- /dev/null +++ b/gcc13-no-add-needed.patch @@ -0,0 +1,37 @@ +2010-02-08 Roland McGrath + + * config/gnu-user.h (LINK_EH_SPEC): Pass --no-add-needed to the linker. + * config/alpha/elf.h (LINK_EH_SPEC): Likewise. + * config/ia64/linux.h (LINK_EH_SPEC): Likewise. + +--- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100 ++++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100 +@@ -168,5 +168,5 @@ extern int alpha_this_gpdisp_sequence_nu + I imagine that other systems will catch up. In the meantime, it + doesn't harm to make sure that the data exists to be used later. */ + #if defined(HAVE_LD_EH_FRAME_HDR) +-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " ++#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} " + #endif +--- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100 ++++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100 +@@ -76,7 +76,7 @@ do { \ + Signalize that because we have fde-glibc, we don't need all C shared libs + linked against -lgcc_s. */ + #undef LINK_EH_SPEC +-#define LINK_EH_SPEC "" ++#define LINK_EH_SPEC "--no-add-needed " + + #undef TARGET_INIT_LIBFUNCS + #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs +--- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100 ++++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100 +@@ -106,7 +106,7 @@ see the files COPYING3 and COPYING.RUNTI + #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC + + #if defined(HAVE_LD_EH_FRAME_HDR) +-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " ++#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} " + #endif + + #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \ diff --git a/gcc13-pr107608.patch b/gcc13-pr107608.patch new file mode 100644 index 0000000..305b260 --- /dev/null +++ b/gcc13-pr107608.patch @@ -0,0 +1,47 @@ +2023-01-15 Aldy Hernandez + + PR tree-optimization/107608 + * range-op-float.cc (range_operator_float::fold_range): Avoid + folding into INF when flag_trapping_math. + * value-range.h (frange::known_isinf): Return false for possible NANs. + +--- gcc/range-op-float.cc ++++ gcc/range-op-float.cc +@@ -91,6 +91,27 @@ range_operator_float::fold_range (frange &r, tree type, + else + r.clear_nan (); + ++ // If the result has overflowed and flag_trapping_math, folding this ++ // operation could elide an overflow or division by zero exception. ++ // Avoid returning a singleton +-INF, to keep the propagators (DOM ++ // and substitute_and_fold_engine) from folding. See PR107608. ++ if (flag_trapping_math ++ && MODE_HAS_INFINITIES (TYPE_MODE (type)) ++ && r.known_isinf () && !op1.known_isinf () && !op2.known_isinf ()) ++ { ++ REAL_VALUE_TYPE inf = r.lower_bound (); ++ if (real_isneg (&inf)) ++ { ++ REAL_VALUE_TYPE min = real_min_representable (type); ++ r.set (type, inf, min); ++ } ++ else ++ { ++ REAL_VALUE_TYPE max = real_max_representable (type); ++ r.set (type, max, inf); ++ } ++ } ++ + return true; + } + +--- gcc/value-range.h ++++ gcc/value-range.h +@@ -1300,6 +1300,7 @@ inline bool + frange::known_isinf () const + { + return (m_kind == VR_RANGE ++ && !maybe_isnan () + && real_identical (&m_min, &m_max) + && real_isinf (&m_min)); + } diff --git a/gcc13-pr107678.patch b/gcc13-pr107678.patch new file mode 100644 index 0000000..3cf29ac --- /dev/null +++ b/gcc13-pr107678.patch @@ -0,0 +1,113 @@ +A recent change only initializes the regs.how[] during Dwarf unwinding +which resulted in an uninitialized offset used in return address signing +and random failures during unwinding. The fix is to encode the return +address signing state in REG_UNSAVED and REG_UNDEFINED. + +2023-01-10 Wilco Dijkstra + + PR target/107678 + * unwind-dw2.c (RA_SIGNED_BIT): Remove. + * unwind-dw2-execute_cfa.h: Use REG_UNSAVED/UNDEFINED + to encode return address signing state. + * config/aarch64/aarch64-unwind.h (aarch64_demangle_return_addr) + Check current return address signing state. + (aarch64_frob_update_contex): Remove. + +--- libgcc/config/aarch64/aarch64-unwind.h ++++ libgcc/config/aarch64/aarch64-unwind.h +@@ -29,8 +29,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + + #define MD_DEMANGLE_RETURN_ADDR(context, fs, addr) \ + aarch64_demangle_return_addr (context, fs, addr) +-#define MD_FROB_UPDATE_CONTEXT(context, fs) \ +- aarch64_frob_update_context (context, fs) + + static inline int + aarch64_cie_signed_with_b_key (struct _Unwind_Context *context) +@@ -55,42 +53,27 @@ aarch64_cie_signed_with_b_key (struct _Unwind_Context *context) + + static inline void * + aarch64_demangle_return_addr (struct _Unwind_Context *context, +- _Unwind_FrameState *fs ATTRIBUTE_UNUSED, ++ _Unwind_FrameState *fs, + _Unwind_Word addr_word) + { + void *addr = (void *)addr_word; +- if (context->flags & RA_SIGNED_BIT) ++ const int reg = DWARF_REGNUM_AARCH64_RA_STATE; ++ ++ if (fs->regs.how[reg] == REG_UNSAVED) ++ return addr; ++ ++ /* Return-address signing state is toggled by DW_CFA_GNU_window_save (where ++ REG_UNDEFINED means enabled), or set by a DW_CFA_expression. */ ++ if (fs->regs.how[reg] == REG_UNDEFINED ++ || (_Unwind_GetGR (context, reg) & 0x1) != 0) + { + _Unwind_Word salt = (_Unwind_Word) context->cfa; + if (aarch64_cie_signed_with_b_key (context) != 0) + return __builtin_aarch64_autib1716 (addr, salt); + return __builtin_aarch64_autia1716 (addr, salt); + } +- else +- return addr; +-} +- +-/* Do AArch64 private initialization on CONTEXT based on frame info FS. Mark +- CONTEXT as return address signed if bit 0 of DWARF_REGNUM_AARCH64_RA_STATE is +- set. */ +- +-static inline void +-aarch64_frob_update_context (struct _Unwind_Context *context, +- _Unwind_FrameState *fs) +-{ +- const int reg = DWARF_REGNUM_AARCH64_RA_STATE; +- int ra_signed; +- if (fs->regs.how[reg] == REG_UNSAVED) +- ra_signed = fs->regs.reg[reg].loc.offset & 0x1; +- else +- ra_signed = _Unwind_GetGR (context, reg) & 0x1; +- if (ra_signed) +- /* The flag is used for re-authenticating EH handler's address. */ +- context->flags |= RA_SIGNED_BIT; +- else +- context->flags &= ~RA_SIGNED_BIT; + +- return; ++ return addr; + } + + #endif /* defined AARCH64_UNWIND_H && defined __ILP32__ */ +--- libgcc/unwind-dw2.c ++++ libgcc/unwind-dw2.c +@@ -137,9 +137,6 @@ struct _Unwind_Context + #define SIGNAL_FRAME_BIT ((~(_Unwind_Word) 0 >> 1) + 1) + /* Context which has version/args_size/by_value fields. */ + #define EXTENDED_CONTEXT_BIT ((~(_Unwind_Word) 0 >> 2) + 1) +- /* Bit reserved on AArch64, return address has been signed with A or B +- key. */ +-#define RA_SIGNED_BIT ((~(_Unwind_Word) 0 >> 3) + 1) + _Unwind_Word flags; + /* 0 for now, can be increased when further fields are added to + struct _Unwind_Context. */ +--- libgcc/unwind-dw2-execute_cfa.h 2023-01-02 17:53:56.003021412 +0100 ++++ libgcc/unwind-dw2-execute_cfa.h 2023-01-12 19:52:05.456327742 +0100 +@@ -278,10 +278,15 @@ + case DW_CFA_GNU_window_save: + #if defined (__aarch64__) && !defined (__ILP32__) + /* This CFA is multiplexed with Sparc. On AArch64 it's used to toggle +- return address signing status. */ ++ return address signing status. The REG_UNDEFINED/UNSAVED states ++ mean RA signing is enabled/disabled. */ + reg = DWARF_REGNUM_AARCH64_RA_STATE; +- gcc_assert (fs->regs.how[reg] == REG_UNSAVED); +- fs->regs.reg[reg].loc.offset ^= 1; ++ gcc_assert (fs->regs.how[reg] == REG_UNSAVED ++ || fs->regs.how[reg] == REG_UNDEFINED); ++ if (fs->regs.how[reg] == REG_UNSAVED) ++ fs->regs.how[reg] = REG_UNDEFINED; ++ else ++ fs->regs.how[reg] = REG_UNSAVED; + #else + /* ??? Hardcoded for SPARC register window configuration. */ + if (__LIBGCC_DWARF_FRAME_REGISTERS__ >= 32) diff --git a/gcc13-pr108411.patch b/gcc13-pr108411.patch new file mode 100644 index 0000000..2c51481 --- /dev/null +++ b/gcc13-pr108411.patch @@ -0,0 +1,14 @@ +PR108411 workaround + +--- gcc/config/aarch64/aarch64.cc 2023-01-15 13:20:00.569241815 +0100 ++++ gcc/config/aarch64/aarch64.cc 2023-01-15 13:30:05.061513817 +0100 +@@ -7707,8 +7707,7 @@ aarch64_layout_arg (cumulative_args_t pc + unsigned int alignment + = aarch64_function_arg_alignment (mode, type, &abi_break, + &abi_break_packed); +- gcc_assert (alignment <= 16 * BITS_PER_UNIT +- && (!alignment || abi_break < alignment) ++ gcc_assert ((!alignment || abi_break < alignment) + && (!abi_break_packed || alignment < abi_break_packed)); + + pcum->aapcs_arg_processed = true; diff --git a/gcc13-rh1574936.patch b/gcc13-rh1574936.patch new file mode 100644 index 0000000..6b4be0c --- /dev/null +++ b/gcc13-rh1574936.patch @@ -0,0 +1,30 @@ +crt files and statically linked libgcc objects cause false positives +in annobin coverage, so we add the assembler flag to generate notes +for them. + +The patch also adds notes to libgcc_s.so, but this is harmless because +these notes only confer that there is no other annobin markup. + +2018-07-25 Florian Weimer + + * Makefile.in (LIBGCC2_CFLAGS, CRTSTUFF_CFLAGS): Add + -Wa,--generate-missing-build-notes=yes. + +--- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100 ++++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200 +@@ -246,6 +246,7 @@ LIBGCC2_DEBUG_CFLAGS = -g + LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \ + $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \ + -fbuilding-libgcc -fno-stack-protector \ ++ -Wa,--generate-missing-build-notes=yes \ + $(INHIBIT_LIBC_CFLAGS) + + # Additional options to use when compiling libgcc2.a. +@@ -301,6 +302,7 @@ CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(IN + $(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \ + -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \ + -fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \ ++ -Wa,--generate-missing-build-notes=yes \ + $(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY) + + # Extra flags to use when compiling crt{begin,end}.o. diff --git a/gcc13-sparc-config-detection.patch b/gcc13-sparc-config-detection.patch new file mode 100644 index 0000000..bbe8ec3 --- /dev/null +++ b/gcc13-sparc-config-detection.patch @@ -0,0 +1,40 @@ +--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500 ++++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500 +@@ -3330,7 +3330,7 @@ sparc-*-rtems*) + tm_file="${tm_file} elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems" + ;; +-sparc-*-linux*) ++sparc-*-linux* | sparcv9-*-linux*) + tm_file="${tm_file} elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + case ${target} in +@@ -3384,7 +3384,7 @@ sparc64-*-rtems*) + extra_options="${extra_options}" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64" + ;; +-sparc64-*-linux*) ++sparc64*-*-linux*) + tm_file="sparc/biarch64.h ${tm_file} elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default64.h sparc/linux64.h sparc/tso.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64" +--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500 ++++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500 +@@ -1002,7 +1002,7 @@ sparc-*-elf*) + tmake_file="${tmake_file} t-fdpbit t-crtfm" + extra_parts="$extra_parts crti.o crtn.o crtfastmath.o" + ;; +-sparc-*-linux*) # SPARC's running GNU/Linux, libc6 ++sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6 + tmake_file="${tmake_file} t-crtfm" + if test "${host_address}" = 64; then + tmake_file="$tmake_file sparc/t-linux64" +@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd* + tmake_file="$tmake_file t-crtfm" + extra_parts="$extra_parts crtfastmath.o" + ;; +-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux ++sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux + extra_parts="$extra_parts crtfastmath.o" + tmake_file="${tmake_file} t-crtfm sparc/t-linux" + if test "${host_address}" = 64; then diff --git a/isl-rh2155127.patch b/isl-rh2155127.patch new file mode 100644 index 0000000..092bddb --- /dev/null +++ b/isl-rh2155127.patch @@ -0,0 +1,85 @@ +From: Sven Verdoolaege +Date: Mon, 6 Jun 2022 12:56:02 +0000 (+0200) +Subject: update m4/ax_prog_cc_for_build.m4 +X-Git-Tag: isl-0.25~11 +X-Git-Url: https://repo.or.cz/isl.git/commitdiff_plain/b4dcdfadc29a6c9f410a72f345f3f32725b1d38b + +update m4/ax_prog_cc_for_build.m4 + +In particular, update to the latest version from the autoconf archive, +but preserve the changes from isl-0.22.1-358-gcd42abdf2 +(m4/ax_prog_cc_for_build.m4: do not override host compiler dependency style, +Tue Jun 9 10:54:10 2020 +0200). + +Signed-off-by: Sven Verdoolaege + +--- isl-0.24/m4/ax_prog_cc_for_build.m4.jj 2021-03-02 12:07:09.000000000 +0100 ++++ isl-0.24/m4/ax_prog_cc_for_build.m4 2022-12-20 18:11:18.855777817 +0100 +@@ -32,7 +32,7 @@ + # and this notice are preserved. This file is offered as-is, without any + # warranty. + +-#serial 18 ++#serial 21 + + AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD]) + AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl +@@ -44,6 +44,8 @@ dnl Use the standard macros, but make th + dnl + pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl + pushdef([ac_cv_prog_cc_c89], ac_cv_build_prog_cc_c89)dnl ++pushdef([ac_cv_prog_cc_c99], ac_cv_build_prog_cc_c99)dnl ++pushdef([ac_cv_prog_cc_c11], ac_cv_build_prog_cc_c11)dnl + pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl + pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl + pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl +@@ -86,7 +88,21 @@ AS_IF([test -n "$build"], [ac_build + [test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"]) + + AC_LANG_PUSH([C]) ++ ++dnl The pushdef([ac_cv_c_compiler_gnu], ...) currently does not cover ++dnl the use of this variable in _AC_LANG_COMPILER_GNU called by ++dnl AC_PROG_CC. Unset this cache variable temporarily as a workaround. ++was_set_c_compiler_gnu=${[ac_cv_c_compiler_gnu]+y} ++AS_IF([test ${was_set_c_compiler_gnu}], ++ [saved_c_compiler_gnu=$[ac_cv_c_compiler_gnu] ++ AS_UNSET([[ac_cv_c_compiler_gnu]])]) ++ + AC_PROG_CC ++ ++dnl Restore ac_cv_c_compiler_gnu ++AS_IF([test ${was_set_c_compiler_gnu}], ++ [[ac_cv_c_compiler_gnu]=$[saved_c_compiler_gnu]]) ++ + _AC_COMPILER_EXEEXT + _AC_COMPILER_OBJEXT + AC_PROG_CPP +--- isl-0.24/configure.jj 2021-04-26 11:13:19.000000000 +0200 ++++ isl-0.24/configure 2022-12-20 18:11:36.882518568 +0100 +@@ -5002,6 +4990,13 @@ ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR + ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_build_c_compiler_gnu + ++ ++was_set_c_compiler_gnu=${ac_cv_c_compiler_gnu+y} ++if test ${was_set_c_compiler_gnu}; then : ++ saved_c_compiler_gnu=$ac_cv_c_compiler_gnu ++ { ac_cv_c_compiler_gnu=; unset ac_cv_c_compiler_gnu;} ++fi ++ + ac_ext=c + ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' + ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' +@@ -5728,6 +5723,11 @@ else + fi + + ++ ++if test ${was_set_c_compiler_gnu}; then : ++ ac_cv_c_compiler_gnu=$saved_c_compiler_gnu ++fi ++ + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + diff --git a/sources b/sources index 4f41efa..56d6327 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (gcc-12.2.1-20221121.tar.xz) = 6fef1438e77d8b7e7aeddea6d2d6a82c37d2e93f65ad9007f04206e1a368dd70597cef01188de4ee9bbfe1811a129303ce10b49cb9758a2b44abe4f0312d073a +SHA512 (gcc-13.0.0-20230115.tar.xz) = f347e7b91a078e37842612be601f28c68249e4300ee122fbcee8a0a8c15171d51507a4913640135cca07e47f979163acdfd1a4b7cd06a21966663986aee95a29 SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95 SHA512 (newlib-cygwin-a8526cb52bedabd4d6ba4b227a5185627f871aa1.tar.xz) = b099246fe4a5d0a372cdaee5da49083df5b2f4440a4e83961600cdf22d37da50c99ce9ae46b769f188a67034ee038cf863260988fc9d594e8e5fb3905a381dec SHA512 (nvptx-tools-472b6e78b3ba918d727698f79911360b7c808247.tar.xz) = 91690321bf96460c3b3e229199a6f752ed1c27c6933d4345dc7e237dc068f604ad211bb3a0373e14d4f332bee05b6227d6933e14e0b475ffdfea8b511ab735e6 diff --git a/update-gcc.sh b/update-gcc.sh index d34d6ce..66e94c6 100755 --- a/update-gcc.sh +++ b/update-gcc.sh @@ -3,5 +3,5 @@ git clone --depth 1 git://gcc.gnu.org/git/gcc.git gcc-dir.tmp git --git-dir=gcc-dir.tmp/.git fetch --depth 1 origin $1 d=`date --iso | sed 's/-//g'` -git --git-dir=gcc-dir.tmp/.git archive --prefix=gcc-12.2.1-$d/ $1 | xz -9e > gcc-12.2.1-$d.tar.xz +git --git-dir=gcc-dir.tmp/.git archive --prefix=gcc-13.0.0-$d/ $1 | xz -9e > gcc-13.0.0-$d.tar.xz rm -rf gcc-dir.tmp