public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/gcc] rhel-f41-base: 11.0.1-0.2
@ 2026-06-29 12:29 Jakub Jelinek
0 siblings, 0 replies; 3+ messages in thread
From: Jakub Jelinek @ 2026-06-29 12:29 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/gcc
Branch : rhel-f41-base
Commit : eb3f14c7132dcf33d1dd58e5e363f785b573ad16
Author : Jakub Jelinek <jakub@redhat.com>
Date : 2021-03-19T18:42:46+01:00
Stats : +178/-0 in 2 file(s)
URL : https://src.fedoraproject.org/rpms/gcc/c/eb3f14c7132dcf33d1dd58e5e363f785b573ad16?branch=rhel-f41-base
Log:
11.0.1-0.2
---
diff --git a/gcc.spec b/gcc.spec
index 48d9672..3c432b2 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -271,6 +271,7 @@ Patch16: gcc11-pr99230.patch
Patch17: gcc11-pr99490.patch
Patch18: gcc11-pr99562.patch
Patch19: gcc11-pr99650.patch
+Patch20: gcc11-pr99341-revert.patch
Patch100: gcc11-fortran-fdec-duplicates.patch
Patch101: gcc11-fortran-flogical-as-integer.patch
@@ -800,6 +801,7 @@ to NVidia PTX capable devices if available.
%patch17 -p0 -b .pr99490~
%patch18 -p0 -b .pr99562~
%patch19 -p0 -b .pr99650~
+%patch20 -p0 -b .pr99341-revert~
%if 0%{?rhel} >= 9
%patch100 -p1 -b .fortran-fdec-duplicates~
diff --git a/gcc11-pr99341-revert.patch b/gcc11-pr99341-revert.patch
new file mode 100644
index 0000000..c7419cb
--- /dev/null
+++ b/gcc11-pr99341-revert.patch
@@ -0,0 +1,176 @@
+libstdc++: Remove symbols for new std::call_once implementation [PR 99341]
+
+This removes the new symbols added for the new futex-based
+std::call_once implementation. These symbols were new on trunk, so not
+in any released version. However, they are already present in some
+beta distro releases (Fedora Linux 34) and in Fedora Linux rawhide. This
+change can be locally reverted by distros that need to keep the symbols
+present until affected packages have been rebuilt.
+
+Revert:
+2021-03-12 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/99341
+ * config/abi/post/aarch64-linux-gnu/baseline_symbols.txt: Remove
+ std::once_flag symbols.
+ * config/abi/post/ia64-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/m68k-linux-gnu/baseline_symbols.txt: Likewise.
+ * config/abi/post/riscv64-linux-gnu/baseline_symbols.txt:
+ Likewise.
+ * config/abi/pre/gnu.ver: Likewise.
+ * src/c++11/mutex.cc [_GLIBCXX_HAVE_LINUX_FUTEX]
+ (struct __once_flag_compat): Remove.
+ (_ZNSt9once_flag11_M_activateEv): Remove.
+ (_ZNSt9once_flag9_M_finishEb): Remove.
+
+--- libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
++++ libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
+@@ -4086,6 +4086,8 @@ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@@GLIBCXX
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
++FUNC:_ZNSt9once_flag11_M_activateEv@@GLIBCXX_3.4.29
++FUNC:_ZNSt9once_flag9_M_finishEb@@GLIBCXX_3.4.29
+ FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4
+ FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4
+ FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4
+--- libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt
++++ libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt
+@@ -4086,6 +4086,8 @@ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@@GLIBCXX
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
++FUNC:_ZNSt9once_flag11_M_activateEv@@GLIBCXX_3.4.29
++FUNC:_ZNSt9once_flag9_M_finishEb@@GLIBCXX_3.4.29
+ FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4
+ FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4
+ FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4
+--- libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
++++ libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
+@@ -4086,6 +4086,8 @@ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
++FUNC:_ZNSt9once_flag11_M_activateEv@@GLIBCXX_3.4.29
++FUNC:_ZNSt9once_flag9_M_finishEb@@GLIBCXX_3.4.29
+ FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4
+ FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4
+ FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4
+--- libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
++++ libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
+@@ -4086,6 +4086,8 @@ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@@GLIBCXX
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4
++FUNC:_ZNSt9once_flag11_M_activateEv@@GLIBCXX_3.4.29
++FUNC:_ZNSt9once_flag9_M_finishEb@@GLIBCXX_3.4.29
+ FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4
+ FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4
+ FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4
+--- libstdc++-v3/config/abi/pre/gnu.ver
++++ libstdc++-v3/config/abi/pre/gnu.ver
+@@ -2388,6 +2388,11 @@ GLIBCXX_3.4.29 {
+ _ZNKRSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE3strEv;
+ _ZNSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE3strEONS_12basic_stringI[cw]S2_S3_EE;
+
++ # std::once_flag::_M_activate()
++ _ZNSt9once_flag11_M_activateEv;
++ # std::once_flag::_M_finish(bool)
++ _ZNSt9once_flag9_M_finishEb;
++
+ # std::to_chars(char*, char*, [float|double|long double])
+ _ZSt8to_charsPcS_[def];
+ # std::to_chars(char*, char*, [float|double|long double], chars_format)
+--- libstdc++-v3/src/c++11/mutex.cc
++++ libstdc++-v3/src/c++11/mutex.cc
+@@ -26,6 +26,90 @@
+
+ #ifdef _GLIBCXX_HAS_GTHREADS
+
++#if defined _GLIBCXX_SHARED && ! _GLIBCXX_INLINE_VERSION
++
++#ifdef _GLIBCXX_HAVE_LINUX_FUTEX
++# include <syscall.h>
++# include <unistd.h>
++# include <limits.h>
++
++namespace std _GLIBCXX_VISIBILITY(default)
++{
++_GLIBCXX_BEGIN_NAMESPACE_VERSION
++
++struct __once_flag_compat
++{
++ enum _Bits : int { _Init = 0, _Active = 1, _Done = 2 };
++ int _M_once = 0;
++ bool _M_activate();
++ void _M_finish(bool returning) noexcept;
++};
++
++bool
++__once_flag_compat::_M_activate()
++{
++ if (__gnu_cxx::__is_single_threaded())
++ {
++ if (_M_once == _Bits::_Done)
++ return false;
++ _M_once = _Bits::_Active;
++ return true;
++ }
++
++ while (true)
++ {
++ int expected = _Bits::_Init;
++ constexpr int active = _Bits::_Active;
++ if (__atomic_compare_exchange_n(&_M_once, &expected, active, false,
++ __ATOMIC_ACQ_REL,
++ __ATOMIC_ACQUIRE))
++ {
++ // This thread is now doing an active execution.
++ return true;
++ }
++
++ if (expected == _Bits::_Done)
++ return false; // A returning execution happened, this is passive.
++
++ // Otherwise, an active execution is happening. Wait for it to finish.
++ constexpr int futex_wait = 128; // FUTEX_WAIT_PRIVATE
++ syscall (SYS_futex, &_M_once, futex_wait, expected, 0);
++ }
++}
++
++void
++std::__once_flag_compat::_M_finish(bool returning) noexcept
++{
++ const int newval = returning ? _Bits::_Done : _Bits::_Init;
++ if (__gnu_cxx::__is_single_threaded())
++ {
++ __glibcxx_assert(_M_once == _Bits::_Active);
++ _M_once = newval;
++ }
++ else
++ {
++ int prev [[maybe_unused]]
++ = __atomic_exchange_n(&_M_once, newval, __ATOMIC_RELEASE);
++ __glibcxx_assert(prev & _Bits::_Active);
++ // Wake any other threads waiting for this execution to finish.
++ constexpr int futex_wake = 129; // FUTEX_WAKE_PRIVATE
++ syscall (SYS_futex, &_M_once, futex_wake, INT_MAX);
++ }
++}
++
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wattribute-alias"
++extern "C" bool _ZNSt9once_flag11_M_activateEv()
++ __attribute__((alias ("_ZNSt18__once_flag_compat11_M_activateEv")));
++extern "C" void _ZNSt9once_flag9_M_finishEb() noexcept
++ __attribute__((alias ("_ZNSt18__once_flag_compat9_M_finishEb")));
++#pragma GCC diagnostic pop
++
++_GLIBCXX_END_NAMESPACE_VERSION
++} // namespace std
++#endif // FUTEX
++#endif // ONCE_FLAG_COMPAT && SHARED && ! INLINE_VERSION
++
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [rpms/gcc] rhel-f41-base: 11.0.1-0.2
@ 2026-06-29 12:29 Jakub Jelinek
0 siblings, 0 replies; 3+ messages in thread
From: Jakub Jelinek @ 2026-06-29 12:29 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/gcc
Branch : rhel-f41-base
Commit : 8b3a7b2201c19435fce6b6ba983843bb95ac666a
Author : Jakub Jelinek <jakub@redhat.com>
Date : 2021-03-19T15:54:46+01:00
Stats : +2/-2 in 1 file(s)
URL : https://src.fedoraproject.org/rpms/gcc/c/8b3a7b2201c19435fce6b6ba983843bb95ac666a?branch=rhel-f41-base
Log:
11.0.1-0.2
---
diff --git a/gcc.spec b/gcc.spec
index e7286c9..48d9672 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,5 +1,5 @@
%global DATE 20210319
-%global gitrev e13870b7c083e39ab17cc827bab5cb45387e8f19
+%global gitrev e4dd2d1e93fef51f05cef0ed942fdc7dfd83dafd
%global gcc_version 11.0.1
%global gcc_major 11
# Note, gcc_release must be integer, if you want to add suffixes to
@@ -119,7 +119,7 @@
Summary: Various compilers (C, C++, Objective-C, ...)
Name: gcc
Version: %{gcc_version}
-Release: %{gcc_release}.1%{?dist}
+Release: %{gcc_release}.2%{?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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [rpms/gcc] rhel-f41-base: 11.0.1-0.2
@ 2026-06-29 12:29 Jakub Jelinek
0 siblings, 0 replies; 3+ messages in thread
From: Jakub Jelinek @ 2026-06-29 12:29 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/gcc
Branch : rhel-f41-base
Commit : e25bc116370a6221bf85184b240daaa213518641
Author : Jakub Jelinek <jakub@redhat.com>
Date : 2021-03-19T15:52:54+01:00
Stats : +1047/-44 in 10 file(s)
URL : https://src.fedoraproject.org/rpms/gcc/c/e25bc116370a6221bf85184b240daaa213518641?branch=rhel-f41-base
Log:
11.0.1-0.2
---
diff --git a/.gitignore b/.gitignore
index c33f299..1c11cc9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,5 @@
/gcc-11.0.0-20210210.tar.xz
/gcc-11.0.0-20210225.tar.xz
/gcc-11.0.1-20210307.tar.xz
+/gcc-11.0.1-20210319.tar.xz
+/isl-0.18.tar.bz2
diff --git a/gcc.spec b/gcc.spec
index 1dda96c..e7286c9 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,4 +1,4 @@
-%global DATE 20210307
+%global DATE 20210319
%global gitrev e13870b7c083e39ab17cc827bab5cb45387e8f19
%global gcc_version 11.0.1
%global gcc_major 11
@@ -145,7 +145,8 @@ Source1: nvptx-tools-%{nvptx_tools_gitrev}.tar.xz
# git --git-dir=newlib-cygwin-dir.tmp/.git archive --prefix=newlib-cygwin-%%{newlib_cygwin_gitrev}/ %%{newlib_cygwin_gitrev} ":(exclude)newlib/libc/sys/linux/include/rpc/*.[hx]" | xz -9e > newlib-cygwin-%%{newlib_cygwin_gitrev}.tar.xz
# rm -rf newlib-cygwin-dir.tmp
Source2: newlib-cygwin-%{newlib_cygwin_gitrev}.tar.xz
-%global isl_version 0.16.1
+%global isl_version 0.18
+Source3: https://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.bz2
URL: http://gcc.gnu.org
# Need binutils with -pie support >= 2.14.90.0.4-4
# Need binutils which can omit dot symbols and overlap .opd on ppc64 >= 2.15.91.0.2-4
@@ -201,15 +202,6 @@ BuildRequires: gcc-gnat >= 3.1, libgnat >= 3.1
%ifarch ia64
BuildRequires: libunwind >= 0.98
%endif
-%if %{build_isl}
-BuildRequires: isl = %{isl_version}
-BuildRequires: isl-devel = %{isl_version}
-%if 0%{?__isa_bits} == 64
-Requires: libisl.so.15()(64bit)
-%else
-Requires: libisl.so.15
-%endif
-%endif
%if %{build_libstdcxx_docs}
BuildRequires: doxygen >= 1.7.1
BuildRequires: graphviz, dblatex, texlive-collection-latex, docbook5-style-xsl
@@ -265,14 +257,20 @@ Patch2: gcc11-sparc-config-detection.patch
Patch3: gcc11-libgomp-omp_h-multilib.patch
Patch4: gcc11-libtool-no-rpath.patch
Patch5: gcc11-isl-dl.patch
-Patch6: gcc11-libstdc++-docs.patch
-Patch7: gcc11-no-add-needed.patch
-Patch8: gcc11-foffload-default.patch
-Patch9: gcc11-Wno-format-security.patch
-Patch10: gcc11-rh1574936.patch
-Patch11: gcc11-d-shared-libphobos.patch
-Patch12: gcc11-pr99378-revert.patch
-Patch13: gcc11-pr99388.patch
+Patch6: gcc11-isl-dl2.patch
+Patch7: gcc11-libstdc++-docs.patch
+Patch8: gcc11-no-add-needed.patch
+Patch9: gcc11-foffload-default.patch
+Patch10: gcc11-Wno-format-security.patch
+Patch11: gcc11-rh1574936.patch
+Patch12: gcc11-d-shared-libphobos.patch
+Patch13: gcc11-pr99378-revert.patch
+Patch14: gcc11-pr99388.patch
+Patch15: gcc11-pr91710.patch
+Patch16: gcc11-pr99230.patch
+Patch17: gcc11-pr99490.patch
+Patch18: gcc11-pr99562.patch
+Patch19: gcc11-pr99650.patch
Patch100: gcc11-fortran-fdec-duplicates.patch
Patch101: gcc11-fortran-flogical-as-integer.patch
@@ -776,26 +774,32 @@ by default add PTX code into the binaries, which can be offloaded
to NVidia PTX capable devices if available.
%prep
-%setup -q -n gcc-%{version}-%{DATE} -a 1 -a 2
+%setup -q -n gcc-%{version}-%{DATE} -a 1 -a 2 -a 3
%patch0 -p0 -b .hack~
%patch2 -p0 -b .sparc-config-detection~
%patch3 -p0 -b .libgomp-omp_h-multilib~
%patch4 -p0 -b .libtool-no-rpath~
%if %{build_isl}
%patch5 -p0 -b .isl-dl~
+%patch6 -p0 -b .isl-dl2~
%endif
%if %{build_libstdcxx_docs}
-%patch6 -p0 -b .libstdc++-docs~
+%patch7 -p0 -b .libstdc++-docs~
%endif
-%patch7 -p0 -b .no-add-needed~
-%patch8 -p0 -b .foffload-default~
-%patch9 -p0 -b .Wno-format-security~
+%patch8 -p0 -b .no-add-needed~
+%patch9 -p0 -b .foffload-default~
+%patch10 -p0 -b .Wno-format-security~
%if 0%{?fedora} >= 29 || 0%{?rhel} > 7
-%patch10 -p0 -b .rh1574936~
+%patch11 -p0 -b .rh1574936~
%endif
-%patch11 -p0 -b .d-shared-libphobos~
-%patch12 -p0 -b .pr99378-revert~
-%patch13 -p0 -b .pr99388~
+%patch12 -p0 -b .d-shared-libphobos~
+%patch13 -p0 -b .pr99378-revert~
+%patch14 -p0 -b .pr99388~
+%patch15 -p0 -b .pr91710~
+%patch16 -p0 -b .pr99230~
+%patch17 -p0 -b .pr99490~
+%patch18 -p0 -b .pr99562~
+%patch19 -p0 -b .pr99650~
%if 0%{?rhel} >= 9
%patch100 -p1 -b .fortran-fdec-duplicates~
@@ -910,6 +914,28 @@ rm -rf obj-%{gcc_target_platform}
mkdir obj-%{gcc_target_platform}
cd obj-%{gcc_target_platform}
+%if %{build_isl}
+mkdir isl-build isl-install
+%ifarch s390 s390x
+ISL_FLAG_PIC=-fPIC
+%else
+ISL_FLAG_PIC=-fpic
+%endif
+cd isl-build
+sed -i 's|libisl|libgcc11privateisl|g' \
+ ../../isl-%{isl_version}/Makefile.{am,in}
+../../isl-%{isl_version}/configure \
+ CC=/usr/bin/gcc CXX=/usr/bin/g++ \
+ CFLAGS="${CFLAGS:-%optflags} $ISL_FLAG_PIC" --prefix=`cd ..; pwd`/isl-install
+make %{?_smp_mflags}
+make install
+cd ../isl-install/lib
+rm libgcc11privateisl.so{,.15}
+mv libgcc11privateisl.so.15.3.0 libisl.so.15
+ln -sf libisl.so.15 libisl.so
+cd ../..
+%endif
+
enablelgo=
enablelada=
enablelobjc=
@@ -953,7 +979,7 @@ CONFIGURE_OPTS="\
%endif
--enable-plugin --enable-initfini-array \
%if %{build_isl}
- --with-isl \
+ --with-isl=`pwd`/isl-install \
%else
--without-isl \
%endif
@@ -1097,6 +1123,10 @@ make jit.sphinx.html
make jit.sphinx.install-html jit_htmldir=`pwd`/../../rpm.doc/libgccjit-devel/html
cd ..
+%if %{build_isl}
+cp -a isl-install/lib/libisl.so.15 gcc/
+%endif
+
# Make generated man pages even if Pod::Man is not new enough
perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl
for i in ../gcc/doc/*.texi; do
@@ -1223,6 +1253,10 @@ chmod 644 %{buildroot}%{_infodir}/gnat*
FULLPATH=%{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}
FULLEPATH=%{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}
+%if %{build_isl}
+cp -a isl-install/lib/libisl.so.15 $FULLPATH/
+%endif
+
# fix some things
ln -sf gcc %{buildroot}%{_prefix}/bin/cc
rm -f %{buildroot}%{_prefix}/lib/cpp
@@ -2296,6 +2330,9 @@ end
%if %{build_libasan}
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libsanitizer.spec
%endif
+%if %{build_isl}
+%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libisl.so.*
+%endif
%ifarch sparcv9 ppc
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/64/crt*.o
@@ -3097,6 +3134,36 @@ end
%endif
%changelog
+* Fri Mar 19 2021 Jakub Jelinek <jakub@redhat.com> 11.0.1-0.2
+- update from trunk
+ - PRs c++/90448, c++/96268, c++/96749, c++/97973, c++/98480, c++/98704,
+ c++/99047, c++/99108, c++/99238, c++/99248, c++/99285, c++/99423,
+ c++/99436, c++/99459, c++/99472, c++/99496, c++/99500, c++/99507,
+ c++/99508, c++/99509, c++/99528, c++/99601, c++/99613, c++/99617,
+ fortran/49278, fortran/96983, fortran/97927, fortran/98858,
+ fortran/99125, fortran/99205, fortran/99345, fortran/99514,
+ fortran/99545, ipa/99517, libstdc++/99172, libstdc++/99341,
+ libstdc++/99413, libstdc++/99536, libstdc++/99537, middle-end/97631,
+ middle-end/98266, middle-end/99502, middle-end/99641, objc++/49070,
+ sanitizer/98920, target/98092, target/98959, target/99070,
+ target/99094, target/99102, target/99422, target/99437, target/99454,
+ target/99463, target/99464, target/99492, target/99504, target/99542,
+ target/99563, target/99592, target/99600, testsuite/97680,
+ testsuite/98245, testsuite/99292, testsuite/99498, testsuite/99626,
+ testsuite/99636, tree-optimization/98834, tree-optimization/99305,
+ tree-optimization/99489, tree-optimization/99510,
+ tree-optimization/99523, tree-optimization/99544
+ - fix ARM ICE in neon_output_shift_immediate (#1922599, PR target/99593)
+- avoid false positive aarch64 -Wpsabi notes in some cases (PR target/91710)
+- fix a -fcompare-debug failure caused by C FE bug (PR debug/99230)
+- fix up -gdwarf-5 -gsplit-dwarf ranges handling (PR debug/99490)
+- fix up handling of > 64 bit constants in dwarf2out (PR debug/99562,
+ PR debug/66728)
+- reject invalid C++ structured bindings that need reference to void
+ (PR c++/99650)
+- include private isl 0.18 in the package instead of relying on old
+ distro version
+
* Sun Mar 7 2021 Jakub Jelinek <jakub@redhat.com> 11.0.1-0.1
- update from trunk
- PRs ada/98996, ada/99020, ada/99095, ada/99264, analyzer/96374,
diff --git a/gcc11-isl-dl2.patch b/gcc11-isl-dl2.patch
new file mode 100644
index 0000000..ac14ed3
--- /dev/null
+++ b/gcc11-isl-dl2.patch
@@ -0,0 +1,71 @@
+2011-04-04 Jakub Jelinek <jakub@redhat.com>
+
+ * toplev.c (toplev_main_argv): New variable.
+ (toplev_main): Initialize it.
+ * graphite.c (init_isl_pointers): Load libisl.so.15 from gcc's private
+ directory.
+
+--- gcc/toplev.c.jj 2008-12-09 23:59:10.000000000 +0100
++++ gcc/toplev.c 2009-01-27 14:33:52.000000000 +0100
+@@ -117,6 +117,8 @@ static void compile_file (void);
+ /* True if we don't need a backend (e.g. preprocessing only). */
+ static bool no_backend;
+
++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;
+@@ -2287,6 +2289,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.c.jj 2010-12-01 10:24:32.000000000 -0500
++++ gcc/graphite.c 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.15", RTLD_LAZY);
++ len = progname - toplev_main_argv[0];
++ buf = XALLOCAVAR (char, len + sizeof "libisl.so.15");
++ memcpy (buf, toplev_main_argv[0], len);
++ strcpy (buf + len, "libisl.so.15");
++ len += sizeof "libisl.so.15";
++ 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.15");
++ }
++ }
++ if (h == NULL)
++ h = dlopen (buf, RTLD_LAZY);
+ isl_pointers__.h = h;
+ if (h == NULL)
+ return false;
diff --git a/gcc11-pr91710.patch b/gcc11-pr91710.patch
new file mode 100644
index 0000000..fde604c
--- /dev/null
+++ b/gcc11-pr91710.patch
@@ -0,0 +1,96 @@
+2021-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/91710
+ * config/aarch64/aarch64.c (aarch64_function_arg_alignment): Change
+ abi_break argument from bool * to unsigned *, store there the pre-GCC 9
+ alignment.
+ (aarch64_layout_arg, aarch64_gimplify_va_arg_expr): Adjust callers.
+ (aarch64_function_arg_regno_p): Likewise. Only emit -Wpsabi note if
+ the old and new alignment after applying MIN/MAX to it is different.
+
+ * gcc.target/aarch64/pr91710.c: New test.
+
+--- gcc/config/aarch64/aarch64.c.jj 2021-03-18 15:14:51.721425223 +0100
++++ gcc/config/aarch64/aarch64.c 2021-03-18 16:35:04.437115447 +0100
+@@ -5938,9 +5938,9 @@ aarch64_vfp_is_call_candidate (cumulativ
+
+ static unsigned int
+ aarch64_function_arg_alignment (machine_mode mode, const_tree type,
+- bool *abi_break)
++ unsigned int *abi_break)
+ {
+- *abi_break = false;
++ *abi_break = 0;
+ if (!type)
+ return GET_MODE_ALIGNMENT (mode);
+
+@@ -5982,7 +5982,7 @@ aarch64_function_arg_alignment (machine_
+
+ if (bitfield_alignment > alignment)
+ {
+- *abi_break = true;
++ *abi_break = alignment;
+ return bitfield_alignment;
+ }
+
+@@ -6004,7 +6004,7 @@ aarch64_layout_arg (cumulative_args_t pc
+ int ncrn, nvrn, nregs;
+ bool allocate_ncrn, allocate_nvrn;
+ HOST_WIDE_INT size;
+- bool abi_break;
++ unsigned int abi_break;
+
+ /* We need to do this once per argument. */
+ if (pcum->aapcs_arg_processed)
+@@ -6322,14 +6322,19 @@ aarch64_function_arg_regno_p (unsigned r
+ static unsigned int
+ aarch64_function_arg_boundary (machine_mode mode, const_tree type)
+ {
+- bool abi_break;
++ unsigned int abi_break;
+ unsigned int alignment = aarch64_function_arg_alignment (mode, type,
+ &abi_break);
++ alignment = MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
+ if (abi_break & warn_psabi)
+- inform (input_location, "parameter passing for argument of type "
+- "%qT changed in GCC 9.1", type);
++ {
++ abi_break = MIN (MAX (abi_break, PARM_BOUNDARY), STACK_BOUNDARY);
++ if (alignment != abi_break)
++ inform (input_location, "parameter passing for argument of type "
++ "%qT changed in GCC 9.1", type);
++ }
+
+- return MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
++ return alignment;
+ }
+
+ /* Implement TARGET_GET_RAW_RESULT_MODE and TARGET_GET_RAW_ARG_MODE. */
+@@ -16616,7 +16621,7 @@ aarch64_gimplify_va_arg_expr (tree valis
+ f_stack, NULL_TREE);
+ size = int_size_in_bytes (type);
+
+- bool abi_break;
++ unsigned int abi_break;
+ align
+ = aarch64_function_arg_alignment (mode, type, &abi_break) / BITS_PER_UNIT;
+
+--- gcc/testsuite/gcc.target/aarch64/pr91710.c.jj 2021-03-18 16:42:33.529232710 +0100
++++ gcc/testsuite/gcc.target/aarch64/pr91710.c 2021-03-18 16:42:07.271518121 +0100
+@@ -0,0 +1,16 @@
++/* PR target/91710 */
++/* { dg-do compile } */
++
++struct S { unsigned int i:4; };
++
++unsigned int test1(struct S s) { /* { dg-bogus "parameter passing for argument of type" } */
++ return s.i;
++}
++
++unsigned int test2(unsigned x, struct S s) { /* { dg-bogus "parameter passing for argument of type" } */
++ return x - s.i;
++}
++
++unsigned int test3(unsigned x, unsigned y, struct S s) { /* { dg-bogus "parameter passing for argument of type" } */
++ return x - y - s.i;
++}
diff --git a/gcc11-pr99230.patch b/gcc11-pr99230.patch
new file mode 100644
index 0000000..75cf6d2
--- /dev/null
+++ b/gcc11-pr99230.patch
@@ -0,0 +1,137 @@
+2021-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/99230
+ * c-gimplify.c (c_genericize_control_stmt): Handle STATEMENT_LIST.
+
+ * cp-gimplify.c (cp_genericize_r) <case STATEMENT_LIST>: Remove
+ special code, instead call c_genericize_control_stmt.
+
+ * gcc.dg/pr99230.c: New test.
+
+--- gcc/c-family/c-gimplify.c.jj 2021-01-04 10:25:50.402102825 +0100
++++ gcc/c-family/c-gimplify.c 2021-03-17 19:19:20.052702095 +0100
+@@ -497,6 +497,35 @@ c_genericize_control_stmt (tree *stmt_p,
+ genericize_omp_for_stmt (stmt_p, walk_subtrees, data, func, lh);
+ break;
+
++ case STATEMENT_LIST:
++ if (TREE_SIDE_EFFECTS (stmt))
++ {
++ tree_stmt_iterator i;
++ int nondebug_stmts = 0;
++ bool clear_side_effects = true;
++ /* Genericization can clear TREE_SIDE_EFFECTS, e.g. when
++ transforming an IF_STMT into COND_EXPR. If such stmt
++ appears in a STATEMENT_LIST that contains only that
++ stmt and some DEBUG_BEGIN_STMTs, without -g where the
++ STATEMENT_LIST wouldn't be present at all the resulting
++ expression wouldn't have TREE_SIDE_EFFECTS set, so make sure
++ to clear it even on the STATEMENT_LIST in such cases. */
++ for (i = tsi_start (stmt); !tsi_end_p (i); tsi_next (&i))
++ {
++ tree t = tsi_stmt (i);
++ if (TREE_CODE (t) != DEBUG_BEGIN_STMT && nondebug_stmts < 2)
++ nondebug_stmts++;
++ walk_tree_1 (tsi_stmt_ptr (i), func, data, NULL, lh);
++ if (TREE_CODE (t) != DEBUG_BEGIN_STMT
++ && (nondebug_stmts > 1 || TREE_SIDE_EFFECTS (tsi_stmt (i))))
++ clear_side_effects = false;
++ }
++ if (clear_side_effects)
++ TREE_SIDE_EFFECTS (stmt) = 0;
++ *walk_subtrees = 0;
++ }
++ break;
++
+ default:
+ break;
+ }
+--- gcc/cp/cp-gimplify.c.jj 2021-03-04 09:42:27.602123905 +0100
++++ gcc/cp/cp-gimplify.c 2021-03-17 19:38:42.743888589 +0100
+@@ -1464,35 +1464,6 @@ cp_genericize_r (tree *stmt_p, int *walk
+ walk_subtrees = 0;
+ break;
+
+- case STATEMENT_LIST:
+- if (TREE_SIDE_EFFECTS (stmt))
+- {
+- tree_stmt_iterator i;
+- int nondebug_stmts = 0;
+- bool clear_side_effects = true;
+- /* Genericization can clear TREE_SIDE_EFFECTS, e.g. when
+- transforming an IF_STMT into COND_EXPR. If such stmt
+- appears in a STATEMENT_LIST that contains only that
+- stmt and some DEBUG_BEGIN_STMTs, without -g where the
+- STATEMENT_LIST wouldn't be present at all the resulting
+- expression wouldn't have TREE_SIDE_EFFECTS set, so make sure
+- to clear it even on the STATEMENT_LIST in such cases. */
+- for (i = tsi_start (stmt); !tsi_end_p (i); tsi_next (&i))
+- {
+- tree t = tsi_stmt (i);
+- if (TREE_CODE (t) != DEBUG_BEGIN_STMT && nondebug_stmts < 2)
+- nondebug_stmts++;
+- cp_walk_tree (tsi_stmt_ptr (i), cp_genericize_r, data, NULL);
+- if (TREE_CODE (t) != DEBUG_BEGIN_STMT
+- && (nondebug_stmts > 1 || TREE_SIDE_EFFECTS (tsi_stmt (i))))
+- clear_side_effects = false;
+- }
+- if (clear_side_effects)
+- TREE_SIDE_EFFECTS (stmt) = 0;
+- *walk_subtrees = 0;
+- }
+- break;
+-
+ case OMP_DISTRIBUTE:
+ /* Need to explicitly instantiate copy ctors on class iterators of
+ composite distribute parallel for. */
+@@ -1566,6 +1537,7 @@ cp_genericize_r (tree *stmt_p, int *walk
+ case OMP_SIMD:
+ case OMP_LOOP:
+ case OACC_LOOP:
++ case STATEMENT_LIST:
+ /* These cases are handled by shared code. */
+ c_genericize_control_stmt (stmt_p, walk_subtrees, data,
+ cp_genericize_r, cp_walk_subtrees);
+--- gcc/testsuite/gcc.dg/pr99230.c.jj 2021-03-17 19:34:26.633711074 +0100
++++ gcc/testsuite/gcc.dg/pr99230.c 2021-03-17 19:33:30.210332887 +0100
+@@ -0,0 +1,40 @@
++/* PR debug/99230 */
++/* { dg-do compile } */
++/* { dg-options "-O2 --param logical-op-non-short-circuit=0 -fcompare-debug --param=jump-table-max-growth-ratio-for-speed=5000" } */
++
++extern void fn2 (void);
++extern void fn3 (int);
++int a, b;
++void
++fn1 (void)
++{
++ int c;
++ short d;
++ switch (a) {
++ case 22000:
++ fn2 ();
++ case 22300:
++ b = 0;
++ case 22600:
++ case 22601:
++ case 22900:
++ fn3 (1);
++ case 20100:
++ fn3 (2);
++ case 20200:
++ fn3 (3);
++ case 20300:
++ fn3 (4);
++ case 20400:
++ fn3 (5);
++ case 20310:
++ fn3 (4);
++ case 20410:
++ fn3 (5);
++ }
++ if (d || c) {
++ do
++ ;
++ while (0);
++ }
++}
diff --git a/gcc11-pr99378-revert.patch b/gcc11-pr99378-revert.patch
index bd043cb..ea7f937 100644
--- a/gcc11-pr99378-revert.patch
+++ b/gcc11-pr99378-revert.patch
@@ -1,21 +1,94 @@
Revert:
+2021-03-18 Vladimir N. Makarov <vmakarov@redhat.com>
+
+ PR target/99422
+ * lra-constraints.c (process_address_1): Use lookup_constraint
+ only for a single constraint.
+
+2021-03-10 Vladimir N. Makarov <vmakarov@redhat.com>
+
+ PR target/99422
+ * lra-constraints.c (process_address_1): Don't check unknown
+ constraint, use X for empty constraint.
+
+2021-03-09 Vladimir N. Makarov <vmakarov@redhat.com>
+
+ PR target/99454
+ * lra-constraints.c (process_address_1): Process constraint 'g'
+ separately and digital constraints containing more one digit.
+
+2021-03-09 Vladimir N. Makarov <vmakarov@redhat.com>
+
+ PR target/99454
+ * lra-constraints.c (process_address_1): Process 0..9 constraints
+ in process_address_1.
+
+2021-03-08 Vladimir N. Makarov <vmakarov@redhat.com>
+
+ PR target/99422
+ * lra-constraints.c (skip_contraint_modifiers): New function.
+ (process_address_1): Use it before lookup_constraint call.
+
2021-03-05 Vladimir N. Makarov <vmakarov@redhat.com>
PR target/99378
* lra-constraints.c (process_address_1): Skip decomposing address
for asm insn operand with unknown constraint.
---- gcc/lra-constraints.c
-+++ gcc/lra-constraints.c
-@@ -3450,9 +3450,8 @@ process_address_1 (int nop, bool check_only_p,
- i.e. bcst_mem_operand in i386 backend. */
- else if (MEM_P (mem)
- && !(INSN_CODE (curr_insn) < 0
-- && (cn == CONSTRAINT__UNKNOWN
-- || (get_constraint_type (cn) == CT_FIXED_FORM
-- && constraint_satisfied_p (op, cn)))))
-+ && get_constraint_type (cn) == CT_FIXED_FORM
-+ && constraint_satisfied_p (op, cn)))
- decompose_mem_address (&ad, mem);
- else if (GET_CODE (op) == SUBREG
- && MEM_P (SUBREG_REG (op)))
+--- gcc/lra-constraints.c.jj 2021-03-19 13:53:38.094778251 +0100
++++ gcc/lra-constraints.c 2021-03-19 14:23:16.017389900 +0100
+@@ -3392,21 +3392,6 @@ equiv_address_substitution (struct addre
+ return change_p;
+ }
+
+-/* Skip all modifiers and whitespaces in constraint STR and return the
+- result. */
+-static const char *
+-skip_contraint_modifiers (const char *str)
+-{
+- for (;;str++)
+- switch (*str)
+- {
+- case '+' : case '&' : case '=': case '*': case ' ': case '\t':
+- case '$': case '^' : case '%': case '?': case '!':
+- break;
+- default: return str;
+- }
+-}
+-
+ /* Major function to make reloads for an address in operand NOP or
+ check its correctness (If CHECK_ONLY_P is true). The supported
+ cases are:
+@@ -3441,8 +3426,8 @@ process_address_1 (int nop, bool check_o
+ HOST_WIDE_INT scale;
+ rtx op = *curr_id->operand_loc[nop];
+ rtx mem = extract_mem_from_operand (op);
+- const char *constraint;
+- enum constraint_num cn;
++ const char *constraint = curr_static_id->operand[nop].constraint;
++ enum constraint_num cn = lookup_constraint (constraint);
+ bool change_p = false;
+
+ if (MEM_P (mem)
+@@ -3450,21 +3435,6 @@ process_address_1 (int nop, bool check_o
+ && GET_CODE (XEXP (mem, 0)) == SCRATCH)
+ return false;
+
+- constraint
+- = skip_contraint_modifiers (curr_static_id->operand[nop].constraint);
+- if (IN_RANGE (constraint[0], '0', '9'))
+- {
+- char *end;
+- unsigned long dup = strtoul (constraint, &end, 10);
+- constraint
+- = skip_contraint_modifiers (curr_static_id->operand[dup].constraint);
+- }
+- if (*skip_contraint_modifiers (constraint
+- + CONSTRAINT_LEN (constraint[0],
+- constraint)) != '\0')
+- cn = CONSTRAINT__UNKNOWN;
+- else
+- cn = lookup_constraint (*constraint == '\0' ? "X" : constraint);
+ if (insn_extra_address_constraint (cn)
+ /* When we find an asm operand with an address constraint that
+ doesn't satisfy address_operand to begin with, we clear
diff --git a/gcc11-pr99490.patch b/gcc11-pr99490.patch
new file mode 100644
index 0000000..abda126
--- /dev/null
+++ b/gcc11-pr99490.patch
@@ -0,0 +1,473 @@
+2021-03-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/99490
+ * dwarf2out.c (debug_ranges_dwo_section): New variable.
+ (DW_RANGES_IDX_SKELETON): Define.
+ (struct dw_ranges): Add begin_entry and end_entry members.
+ (DEBUG_DWO_RNGLISTS_SECTION): Define.
+ (add_ranges_num): Adjust r initializer for addition of *_entry
+ members.
+ (add_ranges_by_labels): For -gsplit-dwarf and force_direct,
+ set idx to DW_RANGES_IDX_SKELETON.
+ (index_rnglists): Don't set r->idx if it is equal to
+ DW_RANGES_IDX_SKELETON. Initialize r->begin_entry and
+ r->end_entry for -gsplit-dwarf if those will be needed by
+ output_rnglists.
+ (output_rnglists): Add DWO argument. If true, switch to
+ debug_ranges_dwo_section rather than debug_ranges_section.
+ Adjust l1/l2 label indexes. Only output the offset table when
+ dwo is true and don't include in there the skeleton range
+ entry if present. For -gsplit-dwarf, skip ranges that belong
+ to the other rnglists section. Change return type from void
+ to bool and return true if there are any range entries for
+ the other section. For dwarf_split_debug_info use
+ DW_RLE_startx_endx, DW_RLE_startx_length and DW_RLE_base_addressx
+ entries instead of DW_RLE_start_end, DW_RLE_start_length and
+ DW_RLE_base_address.
+ (init_sections_and_labels): Initialize debug_ranges_dwo_section
+ if -gsplit-dwarf and DWARF >= 5. Adjust ranges_section_label
+ and range_base_label indexes.
+ (dwarf2out_finish): Call index_rnglists earlier before finalizing
+ .debug_addr. Never emit DW_AT_rnglists_base attribute. For
+ -gsplit-dwarf and DWARF >= 5 call output_rnglists up to twice
+ with different dwo arguments.
+ (dwarf2out_c_finalize): Clear debug_ranges_dwo_section.
+
+--- gcc/dwarf2out.c.jj 2021-03-10 17:36:37.037537129 +0100
++++ gcc/dwarf2out.c 2021-03-11 12:50:00.402418873 +0100
+@@ -171,6 +171,7 @@ static GTY(()) section *debug_line_str_s
+ static GTY(()) section *debug_str_dwo_section;
+ static GTY(()) section *debug_str_offsets_section;
+ static GTY(()) section *debug_ranges_section;
++static GTY(()) section *debug_ranges_dwo_section;
+ static GTY(()) section *debug_frame_section;
+
+ /* Maximum size (in bytes) of an artificially generated label. */
+@@ -3152,11 +3153,17 @@ struct GTY(()) dw_ranges {
+ /* If this is positive, it's a block number, otherwise it's a
+ bitwise-negated index into dw_ranges_by_label. */
+ int num;
++ /* If idx is equal to DW_RANGES_IDX_SKELETON, it should be emitted
++ into .debug_rnglists section rather than .debug_rnglists.dwo
++ for -gsplit-dwarf and DWARF >= 5. */
++#define DW_RANGES_IDX_SKELETON ((1U << 31) - 1)
+ /* Index for the range list for DW_FORM_rnglistx. */
+ unsigned int idx : 31;
+ /* True if this range might be possibly in a different section
+ from previous entry. */
+ unsigned int maybe_new_sec : 1;
++ addr_table_entry *begin_entry;
++ addr_table_entry *end_entry;
+ };
+
+ /* A structure to hold a macinfo entry. */
+@@ -4099,6 +4106,9 @@ new_addr_loc_descr (rtx addr, enum dtpre
+ #ifndef DEBUG_RNGLISTS_SECTION
+ #define DEBUG_RNGLISTS_SECTION ".debug_rnglists"
+ #endif
++#ifndef DEBUG_DWO_RNGLISTS_SECTION
++#define DEBUG_DWO_RNGLISTS_SECTION ".debug_rnglists.dwo"
++#endif
+ #ifndef DEBUG_LINE_STR_SECTION
+ #define DEBUG_LINE_STR_SECTION ".debug_line_str"
+ #endif
+@@ -11751,7 +11761,7 @@ output_aranges (void)
+ static unsigned int
+ add_ranges_num (int num, bool maybe_new_sec)
+ {
+- dw_ranges r = { NULL, num, 0, maybe_new_sec };
++ dw_ranges r = { NULL, num, 0, maybe_new_sec, NULL, NULL };
+ vec_safe_push (ranges_table, r);
+ return vec_safe_length (ranges_table) - 1;
+ }
+@@ -11796,6 +11806,8 @@ add_ranges_by_labels (dw_die_ref die, co
+ add_AT_range_list (die, DW_AT_ranges, offset, force_direct);
+ *added = true;
+ note_rnglist_head (offset);
++ if (dwarf_split_debug_info && force_direct)
++ (*ranges_table)[offset].idx = DW_RANGES_IDX_SKELETON;
+ }
+ }
+
+@@ -11921,23 +11933,87 @@ asm_outputs_debug_line_str (void)
+ }
+
+
+-/* Assign .debug_rnglists indexes. */
++/* Assign .debug_rnglists indexes and unique indexes into the debug_addr
++ section when needed. */
+
+ static void
+ index_rnglists (void)
+ {
+ unsigned i;
+ dw_ranges *r;
++ bool base = false;
++ unsigned int len = vec_safe_length (ranges_table);
+
+ FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r)
+- if (r->label)
+- r->idx = rnglist_idx++;
++ {
++ if (r->label && r->idx != DW_RANGES_IDX_SKELETON)
++ r->idx = rnglist_idx++;
++
++ if (!have_multiple_function_sections)
++ continue;
++ int block_num = r->num;
++ if (HAVE_AS_LEB128 && (r->label || r->maybe_new_sec))
++ base = false;
++ if (block_num > 0)
++ {
++ char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
++ char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
++
++ ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
++ ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
++
++ if (HAVE_AS_LEB128)
++ {
++ if (!base)
++ {
++ dw_ranges *r2 = NULL;
++ if (i < len - 1)
++ r2 = &(*ranges_table)[i + 1];
++ if (r2
++ && r2->num != 0
++ && r2->label == NULL
++ && !r2->maybe_new_sec)
++ {
++ r->begin_entry
++ = add_addr_table_entry (xstrdup (blabel),
++ ate_kind_label);
++ base = true;
++ }
++ }
++ if (base)
++ continue;
++ r->begin_entry
++ = add_addr_table_entry (xstrdup (blabel), ate_kind_label);
++ }
++ else
++ {
++ r->begin_entry
++ = add_addr_table_entry (xstrdup (blabel), ate_kind_label);
++ r->end_entry
++ = add_addr_table_entry (xstrdup (elabel), ate_kind_label);
++ }
++ }
++
++ /* Negative block_num stands for an index into ranges_by_label. */
++ else if (block_num < 0)
++ {
++ int lab_idx = - block_num - 1;
++ const char *blabel = (*ranges_by_label)[lab_idx].begin;
++ const char *elabel = (*ranges_by_label)[lab_idx].end;
++
++ r->begin_entry
++ = add_addr_table_entry (xstrdup (blabel), ate_kind_label);
++ if (!HAVE_AS_LEB128)
++ r->end_entry
++ = add_addr_table_entry (xstrdup (elabel), ate_kind_label);
++ }
++ }
+ }
+
+-/* Emit .debug_rnglists section. */
++/* Emit .debug_rnglists or (when DWO is true) .debug_rnglists.dwo section. */
+
+-static void
+-output_rnglists (unsigned generation)
++static bool
++output_rnglists (unsigned generation, bool dwo)
+ {
+ unsigned i;
+ dw_ranges *r;
+@@ -11945,14 +12021,19 @@ output_rnglists (unsigned generation)
+ char l2[MAX_ARTIFICIAL_LABEL_BYTES];
+ char basebuf[MAX_ARTIFICIAL_LABEL_BYTES];
+
+- switch_to_section (debug_ranges_section);
+- ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
++ if (dwo)
++ switch_to_section (debug_ranges_dwo_section);
++ else
++ {
++ switch_to_section (debug_ranges_section);
++ ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
++ }
+ /* There are up to 4 unique ranges labels per generation.
+ See also init_sections_and_labels. */
+ ASM_GENERATE_INTERNAL_LABEL (l1, DEBUG_RANGES_SECTION_LABEL,
+- 2 + generation * 4);
++ 2 + 2 * dwo + generation * 6);
+ ASM_GENERATE_INTERNAL_LABEL (l2, DEBUG_RANGES_SECTION_LABEL,
+- 3 + generation * 4);
++ 3 + 2 * dwo + generation * 6);
+ if (DWARF_INITIAL_LENGTH_SIZE - dwarf_offset_size == 4)
+ dw2_asm_output_data (4, 0xffffffff,
+ "Initial length escape value indicating "
+@@ -11969,13 +12050,13 @@ output_rnglists (unsigned generation)
+ the offset table plus corresponding DW_FORM_rnglistx uleb128 indexes
+ into it are usually larger than just DW_FORM_sec_offset offsets
+ into the .debug_rnglists section. */
+- dw2_asm_output_data (4, dwarf_split_debug_info ? rnglist_idx : 0,
++ dw2_asm_output_data (4, dwo ? rnglist_idx : 0,
+ "Offset Entry Count");
+- if (dwarf_split_debug_info)
++ if (dwo)
+ {
+ ASM_OUTPUT_LABEL (asm_out_file, ranges_base_label);
+ FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r)
+- if (r->label)
++ if (r->label && r->idx != DW_RANGES_IDX_SKELETON)
+ dw2_asm_output_delta (dwarf_offset_size, r->label,
+ ranges_base_label, NULL);
+ }
+@@ -11983,15 +12064,32 @@ output_rnglists (unsigned generation)
+ const char *lab = "";
+ unsigned int len = vec_safe_length (ranges_table);
+ const char *base = NULL;
++ bool skipping = false;
++ bool ret = false;
+ FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r)
+ {
+ int block_num = r->num;
+
+ if (r->label)
+ {
++ if (dwarf_split_debug_info)
++ {
++ if ((r->idx == DW_RANGES_IDX_SKELETON) == dwo)
++ {
++ ret = true;
++ skipping = true;
++ continue;
++ }
++ }
+ ASM_OUTPUT_LABEL (asm_out_file, r->label);
+ lab = r->label;
+ }
++ if (skipping)
++ {
++ if (block_num == 0)
++ skipping = false;
++ continue;
++ }
+ if (HAVE_AS_LEB128 && (r->label || r->maybe_new_sec))
+ base = NULL;
+ if (block_num > 0)
+@@ -12027,10 +12125,23 @@ output_rnglists (unsigned generation)
+ && r2->label == NULL
+ && !r2->maybe_new_sec)
+ {
+- dw2_asm_output_data (1, DW_RLE_base_address,
+- "DW_RLE_base_address (%s)", lab);
+- dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
+- "Base address (%s)", lab);
++ if (dwarf_split_debug_info)
++ {
++ dw2_asm_output_data (1, DW_RLE_base_addressx,
++ "DW_RLE_base_addressx (%s)",
++ lab);
++ dw2_asm_output_data_uleb128 (r->begin_entry->index,
++ "Base address index "
++ "(%s)", blabel);
++ }
++ else
++ {
++ dw2_asm_output_data (1, DW_RLE_base_address,
++ "DW_RLE_base_address (%s)",
++ lab);
++ dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
++ "Base address (%s)", lab);
++ }
+ strcpy (basebuf, blabel);
+ base = basebuf;
+ }
+@@ -12045,13 +12156,35 @@ output_rnglists (unsigned generation)
+ "Range end address (%s)", lab);
+ continue;
+ }
+- dw2_asm_output_data (1, DW_RLE_start_length,
+- "DW_RLE_start_length (%s)", lab);
+- dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
+- "Range begin address (%s)", lab);
++ if (dwarf_split_debug_info)
++ {
++ dw2_asm_output_data (1, DW_RLE_startx_length,
++ "DW_RLE_startx_length (%s)", lab);
++ dw2_asm_output_data_uleb128 (r->begin_entry->index,
++ "Range begin address index "
++ "(%s)", blabel);
++ }
++ else
++ {
++ dw2_asm_output_data (1, DW_RLE_start_length,
++ "DW_RLE_start_length (%s)", lab);
++ dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
++ "Range begin address (%s)", lab);
++ }
+ dw2_asm_output_delta_uleb128 (elabel, blabel,
+ "Range length (%s)", lab);
+ }
++ else if (dwarf_split_debug_info)
++ {
++ dw2_asm_output_data (1, DW_RLE_startx_endx,
++ "DW_RLE_startx_endx (%s)", lab);
++ dw2_asm_output_data_uleb128 (r->begin_entry->index,
++ "Range begin address index "
++ "(%s)", blabel);
++ dw2_asm_output_data_uleb128 (r->end_entry->index,
++ "Range end address index "
++ "(%s)", elabel);
++ }
+ else
+ {
+ dw2_asm_output_data (1, DW_RLE_start_end,
+@@ -12074,13 +12207,35 @@ output_rnglists (unsigned generation)
+ gcc_unreachable ();
+ if (HAVE_AS_LEB128)
+ {
+- dw2_asm_output_data (1, DW_RLE_start_length,
+- "DW_RLE_start_length (%s)", lab);
+- dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
+- "Range begin address (%s)", lab);
++ if (dwarf_split_debug_info)
++ {
++ dw2_asm_output_data (1, DW_RLE_startx_length,
++ "DW_RLE_startx_length (%s)", lab);
++ dw2_asm_output_data_uleb128 (r->begin_entry->index,
++ "Range begin address index "
++ "(%s)", blabel);
++ }
++ else
++ {
++ dw2_asm_output_data (1, DW_RLE_start_length,
++ "DW_RLE_start_length (%s)", lab);
++ dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
++ "Range begin address (%s)", lab);
++ }
+ dw2_asm_output_delta_uleb128 (elabel, blabel,
+ "Range length (%s)", lab);
+ }
++ else if (dwarf_split_debug_info)
++ {
++ dw2_asm_output_data (1, DW_RLE_startx_endx,
++ "DW_RLE_startx_endx (%s)", lab);
++ dw2_asm_output_data_uleb128 (r->begin_entry->index,
++ "Range begin address index "
++ "(%s)", blabel);
++ dw2_asm_output_data_uleb128 (r->end_entry->index,
++ "Range end address index "
++ "(%s)", elabel);
++ }
+ else
+ {
+ dw2_asm_output_data (1, DW_RLE_start_end,
+@@ -12096,6 +12251,7 @@ output_rnglists (unsigned generation)
+ "DW_RLE_end_of_list (%s)", lab);
+ }
+ ASM_OUTPUT_LABEL (asm_out_file, l2);
++ return ret;
+ }
+
+ /* Data structure containing information about input files. */
+@@ -28823,6 +28979,10 @@ init_sections_and_labels (bool early_lto
+ debug_macinfo_section = get_section (debug_macinfo_section_name,
+ SECTION_DEBUG | SECTION_EXCLUDE,
+ NULL);
++ if (dwarf_version >= 5)
++ debug_ranges_dwo_section
++ = get_section (DEBUG_DWO_RNGLISTS_SECTION,
++ SECTION_DEBUG | SECTION_EXCLUDE, NULL);
+ }
+ debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
+ SECTION_DEBUG, NULL);
+@@ -28857,15 +29017,15 @@ init_sections_and_labels (bool early_lto
+ ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
+ DEBUG_LINE_SECTION_LABEL,
+ init_sections_and_labels_generation);
+- /* There are up to 4 unique ranges labels per generation.
++ /* There are up to 6 unique ranges labels per generation.
+ See also output_rnglists. */
+ ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
+ DEBUG_RANGES_SECTION_LABEL,
+- init_sections_and_labels_generation * 4);
++ init_sections_and_labels_generation * 6);
+ if (dwarf_version >= 5 && dwarf_split_debug_info)
+ ASM_GENERATE_INTERNAL_LABEL (ranges_base_label,
+ DEBUG_RANGES_SECTION_LABEL,
+- 1 + init_sections_and_labels_generation * 4);
++ 1 + init_sections_and_labels_generation * 6);
+ ASM_GENERATE_INTERNAL_LABEL (debug_addr_section_label,
+ DEBUG_ADDR_SECTION_LABEL,
+ init_sections_and_labels_generation);
+@@ -31665,6 +31825,9 @@ dwarf2out_finish (const char *filename)
+ index_location_lists (comp_unit_die ());
+ }
+
++ if (dwarf_version >= 5 && !vec_safe_is_empty (ranges_table))
++ index_rnglists ();
++
+ if (addr_index_table != NULL)
+ {
+ unsigned int index = 0;
+@@ -31730,9 +31893,6 @@ dwarf2out_finish (const char *filename)
+ int mark;
+ struct md5_ctx ctx;
+
+- if (dwarf_version >= 5 && !vec_safe_is_empty (ranges_table))
+- index_rnglists ();
+-
+ /* Compute a checksum of the comp_unit to use as the dwo_id. */
+ md5_init_ctx (&ctx);
+ mark = 0;
+@@ -31752,10 +31912,7 @@ dwarf2out_finish (const char *filename)
+ comp-unit DIE. */
+ if (!vec_safe_is_empty (ranges_table))
+ {
+- if (dwarf_version >= 5)
+- add_AT_lineptr (main_comp_unit_die, DW_AT_rnglists_base,
+- ranges_base_label);
+- else
++ if (dwarf_version < 5)
+ add_AT_lineptr (main_comp_unit_die, DW_AT_GNU_ranges_base,
+ ranges_section_label);
+ }
+@@ -31833,7 +31990,26 @@ dwarf2out_finish (const char *filename)
+ if (!vec_safe_is_empty (ranges_table))
+ {
+ if (dwarf_version >= 5)
+- output_rnglists (generation);
++ {
++ if (dwarf_split_debug_info)
++ {
++ /* We don't know right now whether there are any
++ ranges for .debug_rnglists and any for .debug_rnglists.dwo.
++ Depending on into which of those two belongs the first
++ ranges_table entry, emit that section first and that
++ output_rnglists call will return if the other kind of
++ ranges needs to be emitted as well. */
++ if ((*ranges_table)[0].idx == DW_RANGES_IDX_SKELETON)
++ {
++ if (output_rnglists (generation, false))
++ output_rnglists (generation, true);
++ }
++ else if (output_rnglists (generation, true))
++ output_rnglists (generation, false);
++ }
++ else
++ output_rnglists (generation, false);
++ }
+ else
+ output_ranges ();
+ }
+@@ -32457,6 +32633,7 @@ dwarf2out_c_finalize (void)
+ debug_str_dwo_section = NULL;
+ debug_str_offsets_section = NULL;
+ debug_ranges_section = NULL;
++ debug_ranges_dwo_section = NULL;
+ debug_frame_section = NULL;
+ fde_vec = NULL;
+ debug_str_hash = NULL;
diff --git a/gcc11-pr99562.patch b/gcc11-pr99562.patch
new file mode 100644
index 0000000..1ef63a6
--- /dev/null
+++ b/gcc11-pr99562.patch
@@ -0,0 +1,39 @@
+2021-03-13 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/99562
+ PR debug/66728
+ * dwarf2out.c (get_full_len): Use get_precision rather than
+ min_precision.
+ (add_const_value_attribute): Make sure add_AT_wide argument has
+ precision prec rather than some very wide one.
+
+--- gcc/dwarf2out.c.jj 2021-03-11 14:01:43.385194205 +0100
++++ gcc/dwarf2out.c 2021-03-12 17:34:49.365207265 +0100
+@@ -385,13 +385,12 @@ dump_struct_debug (tree type, enum debug
+ #endif
+
+ /* Get the number of HOST_WIDE_INTs needed to represent the precision
+- of the number. Some constants have a large uniform precision, so
+- we get the precision needed for the actual value of the number. */
++ of the number. */
+
+ static unsigned int
+ get_full_len (const wide_int &op)
+ {
+- int prec = wi::min_precision (op, UNSIGNED);
++ int prec = wi::get_precision (op);
+ return ((prec + HOST_BITS_PER_WIDE_INT - 1)
+ / HOST_BITS_PER_WIDE_INT);
+ }
+@@ -19732,8 +19731,9 @@ add_const_value_attribute (dw_die_ref di
+ {
+ wide_int w1 = rtx_mode_t (rtl, MAX_MODE_INT);
+ unsigned int prec = MIN (wi::min_precision (w1, UNSIGNED),
+- (unsigned int)CONST_WIDE_INT_NUNITS (rtl) * HOST_BITS_PER_WIDE_INT);
+- wide_int w = wi::zext (w1, prec);
++ (unsigned int) CONST_WIDE_INT_NUNITS (rtl)
++ * HOST_BITS_PER_WIDE_INT);
++ wide_int w = wide_int::from (w1, prec, UNSIGNED);
+ add_AT_wide (die, DW_AT_const_value, w);
+ }
+ return true;
diff --git a/gcc11-pr99650.patch b/gcc11-pr99650.patch
new file mode 100644
index 0000000..031c272
--- /dev/null
+++ b/gcc11-pr99650.patch
@@ -0,0 +1,44 @@
+2021-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/99650
+ * decl.c (cp_finish_decomp): Diagnose void initializers when
+ using tuple_element and get.
+
+ * g++.dg/cpp1z/decomp55.C: New test.
+
+--- gcc/cp/decl.c.jj 2021-03-16 21:17:41.014498713 +0100
++++ gcc/cp/decl.c 2021-03-18 19:31:22.430149523 +0100
+@@ -8629,6 +8629,11 @@ cp_finish_decomp (tree decl, tree first,
+ : get_tuple_element_type (type, i));
+ input_location = sloc;
+
++ if (VOID_TYPE_P (eltype))
++ {
++ error ("forming reference to void");
++ eltype = error_mark_node;
++ }
+ if (init == error_mark_node || eltype == error_mark_node)
+ {
+ inform (dloc, "in initialization of structured binding "
+--- gcc/testsuite/g++.dg/cpp1z/decomp55.C.jj 2021-03-18 19:43:07.958457494 +0100
++++ gcc/testsuite/g++.dg/cpp1z/decomp55.C 2021-03-18 19:42:35.099815746 +0100
+@@ -0,0 +1,19 @@
++// PR c++/99650
++// { dg-do compile { target c++17 } }
++
++namespace std {
++ template<typename T> struct tuple_size;
++ template<int, typename> struct tuple_element;
++}
++
++struct A {
++ int i;
++ template <int I> void get() { }
++};
++
++template<> struct std::tuple_size<A> { static const int value = 2; };
++template<int I> struct std::tuple_element<I,A> { using type = void; };
++
++A a = { 42 };
++auto [ x, y ] = a; // { dg-error "forming reference to void" }
++// { dg-message "in initialization of structured binding variable 'x'" "" { target *-*-* } .-1 }
diff --git a/sources b/sources
index cd3423a..877c36e 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,4 @@
-SHA512 (gcc-11.0.1-20210307.tar.xz) = 1efa50991f55de59270af6ff134fc1818ca23e30bdc064f79916e358e46daf301a8d2d3e1afcde58a00a521e8bc2136f8cc5f21c5e05ccd80fa8e5c7e9324e9b
+SHA512 (gcc-11.0.1-20210319.tar.xz) = 5e8469f34601f9fd30439509129a738f61c61357f260cc6addffdea1a6b14eba0cf7030ad6e32dd000f08b0fbba13e90d6618e5d699658000675cdfe22c919f1
+SHA512 (isl-0.18.tar.bz2) = 85d0b40f4dbf14cb99d17aa07048cdcab2dc3eb527d2fbb1e84c41b2de5f351025370e57448b63b2b8a8cf8a0843a089c3263f9baee1542d5c2e1cb37ed39d94
SHA512 (newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz) = 002a48a7b689a81abbf16161bcaec001a842e67dfbe372e9e109092703bfc666675f16198f60ca429370e8850d564547dc505df81bc3aaca4ce6defbc014ad6c
SHA512 (nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz) = f6d10db94fa1570ae0f94df073fa3c73c8e5ee16d59070b53d94f7db0de8a031bc44d7f3f1852533da04b625ce758e022263855ed43cfc6867e0708d001e53c7
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-06-29 12:29 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-29 12:29 [rpms/gcc] rhel-f41-base: 11.0.1-0.2 Jakub Jelinek
-- strict thread matches above, loose matches on Subject: below --
2026-06-29 12:29 Jakub Jelinek
2026-06-29 12:29 Jakub Jelinek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox