From 4621cebfe8cfe1415dfc5a233b32f50ec122f28d Mon Sep 17 00:00:00 2001
From: Toshaan Bharvani
Date: Thu, 24 Nov 2022 15:31:47 +0100
Subject: [PATCH] patch updateds to 11.3.1-2.1
Signed-off-by: Toshaan Bharvani
---
SOURCES/gcc11-Wbidi-chars.patch | 0
SOURCES/gcc11-Wno-format-security.patch | 0
SOURCES/gcc11-bind-now.patch | 36 --
SOURCES/gcc11-d-shared-libphobos.patch | 0
SOURCES/gcc11-dejagnu-multiline.patch | 0
SOURCES/gcc11-dg-ice-fixes.patch | 0
SOURCES/gcc11-foffload-default.patch | 0
...c11-fortran-fdec-add-missing-indexes.patch | 0
SOURCES/gcc11-fortran-fdec-duplicates.patch | 0
SOURCES/gcc11-fortran-fdec-ichar.patch | 0
...gcc11-fortran-fdec-non-integer-index.patch | 0
.../gcc11-fortran-fdec-non-logical-if.patch | 0
SOURCES/gcc11-fortran-fdec-old-init.patch | 0
.../gcc11-fortran-fdec-override-kind.patch | 0
SOURCES/gcc11-fortran-fdec-promotion.patch | 0
SOURCES/gcc11-fortran-fdec-sequence.patch | 0
.../gcc11-fortran-flogical-as-integer.patch | 0
SOURCES/gcc11-hack.patch | 0
SOURCES/gcc11-isl-dl.patch | 0
SOURCES/gcc11-isl-dl2.patch | 0
SOURCES/gcc11-libgcc-link.patch | 12 -
SOURCES/gcc11-libgomp-omp_h-multilib.patch | 0
SOURCES/gcc11-libstdc++-docs.patch | 4 +-
SOURCES/gcc11-libtool-no-rpath.patch | 0
SOURCES/gcc11-no-add-needed.patch | 0
SOURCES/gcc11-pie.patch | 36 --
SOURCES/gcc11-pr101786.patch | 0
SOURCES/gcc11-pr105331.patch | 33 ++
SOURCES/gcc11-relocatable-pch.patch | 0
SOURCES/gcc11-rh1574936.patch | 0
SOURCES/gcc11-rh2106262.patch | 388 ++++++++++++++++++
SOURCES/gcc11-sparc-config-detection.patch | 0
SOURCES/gcc11-stringify-__VA_OPT__-2.patch | 0
SOURCES/gcc11-stringify-__VA_OPT__.patch | 0
34 files changed, 423 insertions(+), 86 deletions(-)
mode change 100755 => 100644 SOURCES/gcc11-Wbidi-chars.patch
mode change 100755 => 100644 SOURCES/gcc11-Wno-format-security.patch
mode change 100755 => 100644 SOURCES/gcc11-bind-now.patch
mode change 100755 => 100644 SOURCES/gcc11-d-shared-libphobos.patch
mode change 100755 => 100644 SOURCES/gcc11-dejagnu-multiline.patch
mode change 100755 => 100644 SOURCES/gcc11-dg-ice-fixes.patch
mode change 100755 => 100644 SOURCES/gcc11-foffload-default.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-add-missing-indexes.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-duplicates.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-ichar.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-non-integer-index.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-non-logical-if.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-old-init.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-override-kind.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-promotion.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-fdec-sequence.patch
mode change 100755 => 100644 SOURCES/gcc11-fortran-flogical-as-integer.patch
mode change 100755 => 100644 SOURCES/gcc11-hack.patch
mode change 100755 => 100644 SOURCES/gcc11-isl-dl.patch
mode change 100755 => 100644 SOURCES/gcc11-isl-dl2.patch
mode change 100755 => 100644 SOURCES/gcc11-libgcc-link.patch
mode change 100755 => 100644 SOURCES/gcc11-libgomp-omp_h-multilib.patch
mode change 100755 => 100644 SOURCES/gcc11-libstdc++-docs.patch
mode change 100755 => 100644 SOURCES/gcc11-libtool-no-rpath.patch
mode change 100755 => 100644 SOURCES/gcc11-no-add-needed.patch
mode change 100755 => 100644 SOURCES/gcc11-pie.patch
mode change 100755 => 100644 SOURCES/gcc11-pr101786.patch
create mode 100644 SOURCES/gcc11-pr105331.patch
mode change 100755 => 100644 SOURCES/gcc11-relocatable-pch.patch
mode change 100755 => 100644 SOURCES/gcc11-rh1574936.patch
create mode 100644 SOURCES/gcc11-rh2106262.patch
mode change 100755 => 100644 SOURCES/gcc11-sparc-config-detection.patch
mode change 100755 => 100644 SOURCES/gcc11-stringify-__VA_OPT__-2.patch
mode change 100755 => 100644 SOURCES/gcc11-stringify-__VA_OPT__.patch
diff --git a/SOURCES/gcc11-Wbidi-chars.patch b/SOURCES/gcc11-Wbidi-chars.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-Wno-format-security.patch b/SOURCES/gcc11-Wno-format-security.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-bind-now.patch b/SOURCES/gcc11-bind-now.patch
old mode 100755
new mode 100644
index 8710490..e0b99a9
--- a/SOURCES/gcc11-bind-now.patch
+++ b/SOURCES/gcc11-bind-now.patch
@@ -131,24 +131,6 @@ index 2ded5d4c50b..5671dc7dcf4 100755
--disable-libquadmath-support
disable libquadmath support for Fortran
--enable-default-pie enable Position Independent Executable as default
-@@ -19394,7 +19397,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 19409 "configure"
-+#line 19412 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -19500,7 +19503,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 19515 "configure"
-+#line 19518 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
@@ -32109,6 +32112,14 @@ fi
@@ -286,24 +268,6 @@ index baa84adbb6c..669ccaede52 100755
# Check whether --enable-cet was given.
if test "${enable_cet+set}" = set; then :
-@@ -11950,7 +11968,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 11963 "configure"
-+#line 11983 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -12056,7 +12074,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 12069 "configure"
-+#line 12089 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac
index 7e6f729e9dc..5d5fea8fe70 100644
--- a/lto-plugin/configure.ac
diff --git a/SOURCES/gcc11-d-shared-libphobos.patch b/SOURCES/gcc11-d-shared-libphobos.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-dejagnu-multiline.patch b/SOURCES/gcc11-dejagnu-multiline.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-dg-ice-fixes.patch b/SOURCES/gcc11-dg-ice-fixes.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-foffload-default.patch b/SOURCES/gcc11-foffload-default.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-add-missing-indexes.patch b/SOURCES/gcc11-fortran-fdec-add-missing-indexes.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-duplicates.patch b/SOURCES/gcc11-fortran-fdec-duplicates.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-ichar.patch b/SOURCES/gcc11-fortran-fdec-ichar.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-non-integer-index.patch b/SOURCES/gcc11-fortran-fdec-non-integer-index.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-non-logical-if.patch b/SOURCES/gcc11-fortran-fdec-non-logical-if.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-old-init.patch b/SOURCES/gcc11-fortran-fdec-old-init.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-override-kind.patch b/SOURCES/gcc11-fortran-fdec-override-kind.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-promotion.patch b/SOURCES/gcc11-fortran-fdec-promotion.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-fdec-sequence.patch b/SOURCES/gcc11-fortran-fdec-sequence.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-fortran-flogical-as-integer.patch b/SOURCES/gcc11-fortran-flogical-as-integer.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-hack.patch b/SOURCES/gcc11-hack.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-isl-dl.patch b/SOURCES/gcc11-isl-dl.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-isl-dl2.patch b/SOURCES/gcc11-isl-dl2.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-libgcc-link.patch b/SOURCES/gcc11-libgcc-link.patch
old mode 100755
new mode 100644
index 8551934..1904c4b
--- a/SOURCES/gcc11-libgcc-link.patch
+++ b/SOURCES/gcc11-libgcc-link.patch
@@ -19,7 +19,6 @@ that also repeats later in the @multilib_flags@, which should be harmless.
2021-08-04 Jakub Jelinek
* config/t-slibgcc (SHLIB_LINK): Add $(LDFLAGS).
- * config/t-slibgcc-darwin (SHLIB_LINK): Likewise.
* config/t-slibgcc-vms (SHLIB_LINK): Likewise.
--- libgcc/config/t-slibgcc
@@ -33,17 +32,6 @@ that also repeats later in the @multilib_flags@, which should be harmless.
-o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
$(SHLIB_OBJS) $(SHLIB_LC) && \
rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
---- libgcc/config/t-slibgcc-darwin
-+++ libgcc/config/t-slibgcc-darwin
-@@ -15,7 +15,7 @@ SHLIB_LC = -lc
- # Note that this version is used for the loader, not the linker; the linker
- # uses the stub versions named by the versioned members of $(INSTALL_FILES).
-
--SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
-+SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) $(LDFLAGS) -dynamiclib -nodefaultlibs \
- -install_name @shlib_slibdir@/$(SHLIB_INSTALL_NAME) \
- -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME) \
- -Wl,-exported_symbols_list,$(SHLIB_MAP) \
--- libgcc/config/t-slibgcc-vms
+++ libgcc/config/t-slibgcc-vms
@@ -22,7 +22,7 @@ SHLIB_LINK = \
diff --git a/SOURCES/gcc11-libgomp-omp_h-multilib.patch b/SOURCES/gcc11-libgomp-omp_h-multilib.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-libstdc++-docs.patch b/SOURCES/gcc11-libstdc++-docs.patch
old mode 100755
new mode 100644
index 4b4f9f8..b044a4d
--- a/SOURCES/gcc11-libstdc++-docs.patch
+++ b/SOURCES/gcc11-libstdc++-docs.patch
@@ -4,7 +4,7 @@
FSF
-+ Release 11.2.1
++ Release 11.3.1
+
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
@@ -17,7 +17,7 @@
- The API documentation, rendered into HTML, can be viewed online
+ The API documentation, rendered into HTML, can be viewed locally
-+ for the 11.2.1 release,
++ for the 11.3.1 release,
+ online
for each GCC release
and
diff --git a/SOURCES/gcc11-libtool-no-rpath.patch b/SOURCES/gcc11-libtool-no-rpath.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-no-add-needed.patch b/SOURCES/gcc11-no-add-needed.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-pie.patch b/SOURCES/gcc11-pie.patch
old mode 100755
new mode 100644
index 36ae11b..728d048
--- a/SOURCES/gcc11-pie.patch
+++ b/SOURCES/gcc11-pie.patch
@@ -291,24 +291,6 @@ index 258b17a226e..bd4fe1fd6ca 100755
--disable-libquadmath-support
disable libquadmath support for Fortran
--enable-default-pie enable Position Independent Executable as default
-@@ -19659,7 +19661,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 19395 "configure"
-+#line 19409 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -19765,7 +19767,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 19501 "configure"
-+#line 19515 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
@@ -32221,13 +32223,17 @@ fi
# Enable --enable-host-shared
# Check whether --enable-host-shared was given.
@@ -793,24 +775,6 @@ index f489f31bc70..0dfc1982844 100755
cet_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fcf-protection"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-@@ -10735,7 +10739,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10748 "configure"
-+#line 10754 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -10841,7 +10845,7 @@ else
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10854 "configure"
-+#line 10860 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
@@ -11524,15 +11528,31 @@ else
multilib_arg=
fi
diff --git a/SOURCES/gcc11-pr101786.patch b/SOURCES/gcc11-pr101786.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-pr105331.patch b/SOURCES/gcc11-pr105331.patch
new file mode 100644
index 0000000..fa1a9d3
--- /dev/null
+++ b/SOURCES/gcc11-pr105331.patch
@@ -0,0 +1,33 @@
+2022-04-21 Jakub Jelinek
+
+ PR target/105331
+ * config/i386/i386.c (ix86_gimplify_va_arg): Mark va_arg_tmp
+ temporary TREE_ADDRESSABLE before trying to gimplify ADDR_EXPR
+ of it.
+
+ * gcc.dg/pr105331.c: New test.
+
+--- gcc/config/i386/i386.c.jj 2022-04-12 09:20:07.566662842 +0200
++++ gcc/config/i386/i386.c 2022-04-21 12:03:32.201951522 +0200
+@@ -4891,6 +4891,7 @@ ix86_gimplify_va_arg (tree valist, tree
+ {
+ int i, prev_size = 0;
+ tree temp = create_tmp_var (type, "va_arg_tmp");
++ TREE_ADDRESSABLE (temp) = 1;
+
+ /* addr = &temp; */
+ t = build1 (ADDR_EXPR, build_pointer_type (type), temp);
+--- gcc/testsuite/gcc.dg/pr105331.c.jj 2022-04-21 12:09:34.398906718 +0200
++++ gcc/testsuite/gcc.dg/pr105331.c 2022-04-21 12:09:07.304283903 +0200
+@@ -0,0 +1,11 @@
++/* PR target/105331 */
++/* { dg-do compile } */
++/* { dg-options "-O -Wuninitialized" } */
++
++#include
++
++int
++foo (va_list *va)
++{
++ return va_arg (*va, double _Complex); /* { dg-bogus "may be used uninitialized" } */
++}
diff --git a/SOURCES/gcc11-relocatable-pch.patch b/SOURCES/gcc11-relocatable-pch.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-rh1574936.patch b/SOURCES/gcc11-rh1574936.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-rh2106262.patch b/SOURCES/gcc11-rh2106262.patch
new file mode 100644
index 0000000..34e9c5b
--- /dev/null
+++ b/SOURCES/gcc11-rh2106262.patch
@@ -0,0 +1,388 @@
+commit c725028a8bb9478ec84332641147ad12b9236922
+Author: Jonathan Wakely
+Date: Tue Dec 14 14:32:35 2021 +0000
+
+ libstdc++: Fix handling of invalid ranges in std::regex [PR102447]
+
+ std::regex currently allows invalid bracket ranges such as [\w-a] which
+ are only allowed by ECMAScript when in web browser compatibility mode.
+ It should be an error, because the start of the range is a character
+ class, not a single character. The current implementation of
+ _Compiler::_M_expression_term does not provide a way to reject this,
+ because we only remember a previous character, not whether we just
+ processed a character class (or collating symbol etc.)
+
+ This patch replaces the pair used to emulate
+ optional with a custom class closer to pair. That
+ allows us to track three states, so that we can tell when we've just
+ seen a character class.
+
+ With this additional state the code in _M_expression_term for processing
+ the _S_token_bracket_dash can be improved to correctly reject the [\w-a]
+ case, without regressing for valid cases such as [\w-] and [----].
+
+ libstdc++-v3/ChangeLog:
+
+ PR libstdc++/102447
+ * include/bits/regex_compiler.h (_Compiler::_BracketState): New
+ class.
+ (_Compiler::_BrackeyMatcher): New alias template.
+ (_Compiler::_M_expression_term): Change pair
+ parameter to _BracketState. Process first character for
+ ECMAScript syntax as well as POSIX.
+ * include/bits/regex_compiler.tcc
+ (_Compiler::_M_insert_bracket_matcher): Pass _BracketState.
+ (_Compiler::_M_expression_term): Use _BracketState to store
+ state between calls. Improve handling of dashes in ranges.
+ * testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc:
+ Add more tests for ranges containing dashes. Check invalid
+ ranges with character class at the beginning.
+
+ (cherry picked from commit 7ce3c230edf6e498e125c805a6dd313bf87dc439)
+
+diff --git a/libstdc++-v3/include/bits/regex_compiler.h b/libstdc++-v3/include/bits/regex_compiler.h
+index f224fcb06e0..aa19df2bf9a 100644
+--- a/libstdc++-v3/include/bits/regex_compiler.h
++++ b/libstdc++-v3/include/bits/regex_compiler.h
+@@ -122,13 +122,45 @@ namespace __detail
+ void
+ _M_insert_bracket_matcher(bool __neg);
+
+- // Returns true if successfully matched one term and should continue.
++ // Cache of the last atom seen in a bracketed range expression.
++ struct _BracketState
++ {
++ enum class _Type : char { _None, _Char, _Class } _M_type = _Type::_None;
++ _CharT _M_char;
++
++ void
++ set(_CharT __c) noexcept { _M_type = _Type::_Char; _M_char = __c; }
++
++ _GLIBCXX_NODISCARD _CharT
++ get() const noexcept { return _M_char; }
++
++ void
++ reset(_Type __t = _Type::_None) noexcept { _M_type = __t; }
++
++ explicit operator bool() const noexcept
++ { return _M_type != _Type::_None; }
++
++ // Previous token was a single character.
++ _GLIBCXX_NODISCARD bool
++ _M_is_char() const noexcept { return _M_type == _Type::_Char; }
++
++ // Previous token was a character class, equivalent class,
++ // collating symbol etc.
++ _GLIBCXX_NODISCARD bool
++ _M_is_class() const noexcept { return _M_type == _Type::_Class; }
++ };
++
++ template
++ using _BracketMatcher
++ = std::__detail::_BracketMatcher<_TraitsT, __icase, __collate>;
++
++ // Returns true if successfully parsed one term and should continue
++ // compiling a bracket expression.
+ // Returns false if the compiler should move on.
+ template
+ bool
+- _M_expression_term(pair& __last_char,
+- _BracketMatcher<_TraitsT, __icase, __collate>&
+- __matcher);
++ _M_expression_term(_BracketState& __last_char,
++ _BracketMatcher<__icase, __collate>& __matcher);
+
+ int
+ _M_cur_int_value(int __radix);
+diff --git a/libstdc++-v3/include/bits/regex_compiler.tcc b/libstdc++-v3/include/bits/regex_compiler.tcc
+index ea07bc2428e..7769a9e63a3 100644
+--- a/libstdc++-v3/include/bits/regex_compiler.tcc
++++ b/libstdc++-v3/include/bits/regex_compiler.tcc
+@@ -403,7 +403,7 @@ namespace __detail
+ _M_insert_character_class_matcher()
+ {
+ __glibcxx_assert(_M_value.size() == 1);
+- _BracketMatcher<_TraitsT, __icase, __collate> __matcher
++ _BracketMatcher<__icase, __collate> __matcher
+ (_M_ctype.is(_CtypeT::upper, _M_value[0]), _M_traits);
+ __matcher._M_add_character_class(_M_value, false);
+ __matcher._M_ready();
+@@ -424,25 +424,17 @@ namespace __detail
+ _Compiler<_TraitsT>::
+ _M_insert_bracket_matcher(bool __neg)
+ {
+- _BracketMatcher<_TraitsT, __icase, __collate> __matcher(__neg, _M_traits);
+- pair __last_char; // Optional<_CharT>
+- __last_char.first = false;
+- if (!(_M_flags & regex_constants::ECMAScript))
+- {
+- if (_M_try_char())
+- {
+- __last_char.first = true;
+- __last_char.second = _M_value[0];
+- }
+- else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
+- {
+- __last_char.first = true;
+- __last_char.second = '-';
+- }
+- }
+- while (_M_expression_term(__last_char, __matcher));
+- if (__last_char.first)
+- __matcher._M_add_char(__last_char.second);
++ _BracketMatcher<__icase, __collate> __matcher(__neg, _M_traits);
++ _BracketState __last_char;
++ if (_M_try_char())
++ __last_char.set(_M_value[0]);
++ else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
++ // Dash as first character is a normal character.
++ __last_char.set('-');
++ while (_M_expression_term(__last_char, __matcher))
++ ;
++ if (__last_char._M_is_char())
++ __matcher._M_add_char(__last_char.get());
+ __matcher._M_ready();
+ _M_stack.push(_StateSeqT(
+ *_M_nfa,
+@@ -447,27 +438,27 @@ namespace __detail
+ template
+ bool
+ _Compiler<_TraitsT>::
+- _M_expression_term(pair& __last_char,
+- _BracketMatcher<_TraitsT, __icase, __collate>& __matcher)
++ _M_expression_term(_BracketState& __last_char,
++ _BracketMatcher<__icase, __collate>& __matcher)
+ {
+ if (_M_match_token(_ScannerT::_S_token_bracket_end))
+ return false;
+
++ // Add any previously cached char into the matcher and update cache.
+ const auto __push_char = [&](_CharT __ch)
+ {
+- if (__last_char.first)
+- __matcher._M_add_char(__last_char.second);
+- else
+- __last_char.first = true;
+- __last_char.second = __ch;
++ if (__last_char._M_is_char())
++ __matcher._M_add_char(__last_char.get());
++ __last_char.set(__ch);
+ };
+- const auto __flush = [&]
++ // Add any previously cached char into the matcher and update cache.
++ const auto __push_class = [&]
+ {
+- if (__last_char.first)
+- {
+- __matcher._M_add_char(__last_char.second);
+- __last_char.first = false;
+- }
++ if (__last_char._M_is_char())
++ __matcher._M_add_char(__last_char.get());
++ // We don't cache anything here, just record that the last thing
++ // processed was a character class (or similar).
++ __last_char.reset(_BracketState::_Type::_Class);
+ };
+
+ if (_M_match_token(_ScannerT::_S_token_collsymbol))
+@@ -476,16 +467,16 @@ namespace __detail
+ if (__symbol.size() == 1)
+ __push_char(__symbol[0]);
+ else
+- __flush();
++ __push_class();
+ }
+ else if (_M_match_token(_ScannerT::_S_token_equiv_class_name))
+ {
+- __flush();
++ __push_class();
+ __matcher._M_add_equivalence_class(_M_value);
+ }
+ else if (_M_match_token(_ScannerT::_S_token_char_class_name))
+ {
+- __flush();
++ __push_class();
+ __matcher._M_add_character_class(_M_value, false);
+ }
+ else if (_M_try_char())
+@@ -502,49 +493,50 @@ namespace __detail
+ // It turns out that no one reads BNFs ;)
+ else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
+ {
+- if (!__last_char.first)
++ if (_M_match_token(_ScannerT::_S_token_bracket_end))
+ {
+- if (!(_M_flags & regex_constants::ECMAScript))
+- {
+- if (_M_match_token(_ScannerT::_S_token_bracket_end))
+- {
+- __push_char('-');
+- return false;
+- }
+- __throw_regex_error(
+- regex_constants::error_range,
+- "Unexpected dash in bracket expression. For POSIX syntax, "
+- "a dash is not treated literally only when it is at "
+- "beginning or end.");
+- }
++ // For "-]" the dash is a literal character.
+ __push_char('-');
++ return false;
+ }
+- else
++ else if (__last_char._M_is_class())
++ {
++ // "\\w-" is invalid, start of range must be a single char.
++ __throw_regex_error(regex_constants::error_range,
++ "Invalid start of range in bracket expression.");
++ }
++ else if (__last_char._M_is_char())
+ {
+ if (_M_try_char())
+ {
+- __matcher._M_make_range(__last_char.second, _M_value[0]);
+- __last_char.first = false;
++ // "x-y"
++ __matcher._M_make_range(__last_char.get(), _M_value[0]);
++ __last_char.reset();
+ }
+ else if (_M_match_token(_ScannerT::_S_token_bracket_dash))
+ {
+- __matcher._M_make_range(__last_char.second, '-');
+- __last_char.first = false;
++ // "x--"
++ __matcher._M_make_range(__last_char.get(), '-');
++ __last_char.reset();
+ }
+ else
+- {
+- if (_M_scanner._M_get_token()
+- != _ScannerT::_S_token_bracket_end)
+- __throw_regex_error(
+- regex_constants::error_range,
+- "Character is expected after a dash.");
+- __push_char('-');
+- }
++ __throw_regex_error(regex_constants::error_range,
++ "Invalid end of range in bracket expression.");
+ }
++ else if (_M_flags & regex_constants::ECMAScript)
++ {
++ // A dash that is not part of an existing range. Might be the
++ // start of a new range, or might just be a literal '-' char.
++ // Only ECMAScript allows that in the middle of a bracket expr.
++ __push_char('-');
++ }
++ else
++ __throw_regex_error(regex_constants::error_range,
++ "Invalid dash in bracket expression.");
+ }
+ else if (_M_match_token(_ScannerT::_S_token_quoted_class))
+ {
+- __flush();
++ __push_class();
+ __matcher._M_add_character_class(_M_value,
+ _M_ctype.is(_CtypeT::upper,
+ _M_value[0]));
+diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc
+index 7df70604ea6..0d76e63da7b 100644
+--- a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc
++++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc
+@@ -69,6 +69,16 @@ test01()
+ void
+ test02()
+ {
++ VERIFY(regex_match("-", regex("[-]", regex_constants::ECMAScript)));
++ VERIFY(regex_match("-", regex("[--]", regex_constants::ECMAScript)));
++ VERIFY(regex_match("-", regex("[---]", regex_constants::ECMAScript)));
++ VERIFY(regex_match("-", regex("[----]", regex_constants::ECMAScript)));
++ VERIFY(regex_match("-", regex("[-----]", regex_constants::ECMAScript)));
++
++ VERIFY(regex_match("-", regex("[-]", regex_constants::extended)));
++ VERIFY(regex_match("-", regex("[--]", regex_constants::extended)));
++ VERIFY(regex_match("-", regex("[---]", regex_constants::extended)));
++ VERIFY(regex_match("-", regex("[----]", regex_constants::extended)));
+ try
+ {
+ std::regex re("[-----]", std::regex::extended);
+@@ -78,7 +88,6 @@ test02()
+ {
+ VERIFY(e.code() == std::regex_constants::error_range);
+ }
+- std::regex re("[-----]", std::regex::ECMAScript);
+
+ VERIFY(!regex_match("b", regex("[-ac]", regex_constants::extended)));
+ VERIFY(!regex_match("b", regex("[ac-]", regex_constants::extended)));
+@@ -93,7 +102,27 @@ test02()
+ }
+ catch (const std::regex_error& e)
+ {
++ VERIFY(e.code() == std::regex_constants::error_range);
++ }
++ try
++ {
++ regex("[@--]", regex_constants::extended);
++ VERIFY(false);
+ }
++ catch (const std::regex_error& e)
++ {
++ VERIFY(e.code() == std::regex_constants::error_range);
++ }
++ try
++ {
++ regex("[--%]", regex_constants::extended);
++ VERIFY(false);
++ }
++ catch (const std::regex_error& e)
++ {
++ VERIFY(e.code() == std::regex_constants::error_range);
++ }
++
+ VERIFY(regex_match("].", regex("[][.hyphen.]-0]*", regex_constants::extended)));
+ }
+
+@@ -158,6 +187,36 @@ test06()
+ VERIFY(regex_match("a-", debian_cron_namespace_ok));
+ }
+
++// libstdc++/102447
++void
++test07()
++{
++ VERIFY(regex_match("-", std::regex("[\\w-]", std::regex::ECMAScript)));
++ VERIFY(regex_match("a", std::regex("[\\w-]", std::regex::ECMAScript)));
++ VERIFY(regex_match("-", std::regex("[a-]", std::regex::ECMAScript)));
++ VERIFY(regex_match("a", std::regex("[a-]", std::regex::ECMAScript)));
++
++ try
++ {
++ std::regex re("[\\w-a]", std::regex::ECMAScript);
++ VERIFY(false);
++ }
++ catch (const std::regex_error& e)
++ {
++ VERIFY(e.code() == std::regex_constants::error_range);
++ }
++
++ try
++ {
++ std::regex re("[\\w--]", std::regex::ECMAScript);
++ VERIFY(false);
++ }
++ catch (const std::regex_error& e)
++ {
++ VERIFY(e.code() == std::regex_constants::error_range);
++ }
++}
++
+ int
+ main()
+ {
+@@ -167,6 +226,7 @@ main()
+ test04();
+ test05();
+ test06();
++ test07();
+
+ return 0;
+ }
diff --git a/SOURCES/gcc11-sparc-config-detection.patch b/SOURCES/gcc11-sparc-config-detection.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-stringify-__VA_OPT__-2.patch b/SOURCES/gcc11-stringify-__VA_OPT__-2.patch
old mode 100755
new mode 100644
diff --git a/SOURCES/gcc11-stringify-__VA_OPT__.patch b/SOURCES/gcc11-stringify-__VA_OPT__.patch
old mode 100755
new mode 100644