commit:     8043ac03bbd26d81e5476ed85b8e19b00e5cfc47
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 27 15:13:58 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Dec 27 15:13:58 2024 +0000
URL:        https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=8043ac03

15.0.0: drop 
79_all_PR118124-c-Fix-ICEs-with-large-initializer-lists-or-ones-i.patch

The C++ optimisation has been reverted for now upstream so this patch
isn't needed, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118124#c4.

Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...Es-with-large-initializer-lists-or-ones-i.patch | 307 ---------------------
 1 file changed, 307 deletions(-)

diff --git 
a/15.0.0/gentoo/79_all_PR118124-c-Fix-ICEs-with-large-initializer-lists-or-ones-i.patch
 
b/15.0.0/gentoo/79_all_PR118124-c-Fix-ICEs-with-large-initializer-lists-or-ones-i.patch
deleted file mode 100644
index ded69c7..0000000
--- 
a/15.0.0/gentoo/79_all_PR118124-c-Fix-ICEs-with-large-initializer-lists-or-ones-i.patch
+++ /dev/null
@@ -1,307 +0,0 @@
-https://inbox.sourceware.org/gcc-patches/Z2U3spZjDr+xEZP0@tucnak/
-
-From b904875837cae597709d37ec45f70c70d353e901 Mon Sep 17 00:00:00 2001
-Message-ID: 
<b904875837cae597709d37ec45f70c70d353e901.1734693860.git....@gentoo.org>
-From: Jakub Jelinek <[email protected]>
-Date: Fri, 20 Dec 2024 10:24:02 +0100
-Subject: [PATCH] c++, v3: Fix ICEs with large initializer lists or ones
- including #embed [PR118124]
-
-On Thu, Dec 19, 2024 at 07:01:39PM +0100, Jakub Jelinek wrote:
-> So far lightly tested, ok for trunk this way if it passes bootstrap & 
testing?
-
-Bootstrap/regtest found an issue, warning about
-  if ()
-    for ()
-      if ()
-      else if ()
-      else
-so I've added {}s around it (no other changes from the previous patch).
-
-Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
-
-2024-12-20  Jakub Jelinek  <[email protected]>
-
-       PR c++/118124
-       * call.cc (convert_like_internal): Handle RAW_DATA_CST in
-       ck_list handling.  Formatting fixes.
-
-       * g++.dg/cpp/embed-15.C: New test.
-       * g++.dg/cpp/embed-16.C: New test.
-       * g++.dg/cpp0x/initlist-opt3.C: New test.
-       * g++.dg/cpp0x/initlist-opt4.C: New test.
----
- gcc/cp/call.cc                             | 84 ++++++++++++++++++++--
- gcc/testsuite/g++.dg/cpp/embed-15.C        | 35 +++++++++
- gcc/testsuite/g++.dg/cpp/embed-16.C        | 18 +++++
- gcc/testsuite/g++.dg/cpp0x/initlist-opt3.C | 47 ++++++++++++
- gcc/testsuite/g++.dg/cpp0x/initlist-opt4.C | 20 ++++++
- 5 files changed, 198 insertions(+), 6 deletions(-)
- create mode 100644 gcc/testsuite/g++.dg/cpp/embed-15.C
- create mode 100644 gcc/testsuite/g++.dg/cpp/embed-16.C
- create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist-opt3.C
- create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist-opt4.C
-
-diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc
-index c8420db568ea..27cea0db80af 100644
---- a/gcc/cp/call.cc
-+++ b/gcc/cp/call.cc
-@@ -8766,8 +8766,8 @@ convert_like_internal (conversion *convs, tree expr, 
tree fn, int argnum,
- 
-       if (tree init = maybe_init_list_as_array (elttype, expr))
-         {
--          elttype = cp_build_qualified_type
--            (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
-+          elttype = cp_build_qualified_type (elttype, cp_type_quals (elttype)
-+                                                      | TYPE_QUAL_CONST);
-           array = build_array_of_n_type (elttype, len);
-           array = build_vec_init_expr (array, init, complain);
-           array = get_target_expr (array);
-@@ -8775,13 +8775,85 @@ convert_like_internal (conversion *convs, tree expr, 
tree fn, int argnum,
-         }
-       else if (len)
-         {
--          tree val; unsigned ix;
--
-+          tree val;
-+          unsigned ix;
-           tree new_ctor = build_constructor (init_list_type_node, NULL);
- 
-           /* Convert all the elements.  */
-           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), ix, val)
-             {
-+              if (TREE_CODE (val) == RAW_DATA_CST)
-+                {
-+                  tree elt_type;
-+                  conversion *next;
-+                  /* For conversion to initializer_list<unsigned char> or
-+                     initializer_list<char> or initializer_list<signed char>
-+                     we can optimize and keep RAW_DATA_CST with adjusted
-+                     type if we report narrowing errors if needed, for
-+                     others this converts each element separately.  */
-+                  if (convs->u.list[ix]->kind == ck_std
-+                      && (elt_type = convs->u.list[ix]->type)
-+                      && (TREE_CODE (elt_type) == INTEGER_TYPE
-+                          || is_byte_access_type (elt_type))
-+                      && TYPE_PRECISION (elt_type) == CHAR_BIT
-+                      && (next = next_conversion (convs->u.list[ix]))
-+                      && next->kind == ck_identity)
-+                    {
-+                      if (!TYPE_UNSIGNED (elt_type)
-+                          && (TYPE_UNSIGNED (TREE_TYPE (val))
-+                              || (TYPE_PRECISION (TREE_TYPE (val))
-+                                  > CHAR_BIT)))
-+                        for (int i = 0; i < RAW_DATA_LENGTH (val); ++i)
-+                          {
-+                            if (RAW_DATA_SCHAR_ELT (val, i) >= 0)
-+                              continue;
-+                            else if (complain & tf_error)
-+                              {
-+                                location_t loc
-+                                  = cp_expr_loc_or_input_loc (val);
-+                                int savederrorcount = errorcount;
-+                                permerror_opt (loc, OPT_Wnarrowing,
-+                                               "narrowing conversion of "
-+                                               "%qd from %qH to %qI",
-+                                               RAW_DATA_UCHAR_ELT (val, i),
-+                                               TREE_TYPE (val), elt_type);
-+                                if (errorcount != savederrorcount)
-+                                  return error_mark_node;
-+                              }
-+                            else
-+                              return error_mark_node;
-+                          }
-+                      tree sub = copy_node (val);
-+                      TREE_TYPE (sub) = elt_type;
-+                      CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_ctor),
-+                                              NULL_TREE, sub);
-+                    }
-+                  else
-+                    {
-+                      for (int i = 0; i < RAW_DATA_LENGTH (val); ++i)
-+                        {
-+                          tree elt
-+                            = build_int_cst (TREE_TYPE (val),
-+                                             RAW_DATA_UCHAR_ELT (val, i));
-+                          tree sub
-+                            = convert_like (convs->u.list[ix], elt,
-+                                            fn, argnum, false, false,
-+                                            /*nested_p=*/true, complain);
-+                          if (sub == error_mark_node)
-+                            return sub;
-+                          if (!check_narrowing (TREE_TYPE (sub), elt,
-+                                                complain))
-+                            return error_mark_node;
-+                          tree nc = new_ctor;
-+                          CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (nc),
-+                                                  NULL_TREE, sub);
-+                          if (!TREE_CONSTANT (sub))
-+                            TREE_CONSTANT (new_ctor) = false;
-+                        }
-+                    }
-+                  len += RAW_DATA_LENGTH (val) - 1;
-+                  continue;
-+                }
-               tree sub = convert_like (convs->u.list[ix], val, fn,
-                                        argnum, false, false,
-                                        /*nested_p=*/true, complain);
-@@ -8796,8 +8868,8 @@ convert_like_internal (conversion *convs, tree expr, 
tree fn, int argnum,
-                 TREE_CONSTANT (new_ctor) = false;
-             }
-           /* Build up the array.  */
--          elttype = cp_build_qualified_type
--            (elttype, cp_type_quals (elttype) | TYPE_QUAL_CONST);
-+          elttype = cp_build_qualified_type (elttype, cp_type_quals (elttype)
-+                                                      | TYPE_QUAL_CONST);
-           array = build_array_of_n_type (elttype, len);
-           array = finish_compound_literal (array, new_ctor, complain);
-           /* This is dubious now, should be blessed by P2752.  */
-diff --git a/gcc/testsuite/g++.dg/cpp/embed-15.C 
b/gcc/testsuite/g++.dg/cpp/embed-15.C
-new file mode 100644
-index 000000000000..a3994536e576
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp/embed-15.C
-@@ -0,0 +1,35 @@
-+// PR c++/118124
-+// { dg-do compile { target c++11 } }
-+// { dg-options "-O2" }
-+
-+namespace std {
-+template <class T> struct initializer_list {
-+private:
-+  const T *_M_array;
-+  __SIZE_TYPE__ _M_len;
-+};
-+}
-+struct A {
-+  A (std::initializer_list<char>);
-+};
-+A a {
-+#embed __FILE__
-+};
-+struct B {
-+  B (std::initializer_list<unsigned char>);
-+};
-+B b {
-+#embed __FILE__
-+};
-+struct C {
-+  C (std::initializer_list<int>);
-+};
-+C c {
-+#embed __FILE__
-+};
-+struct D {
-+  D (std::initializer_list<float>);
-+};
-+D d {
-+#embed __FILE__
-+};
-diff --git a/gcc/testsuite/g++.dg/cpp/embed-16.C 
b/gcc/testsuite/g++.dg/cpp/embed-16.C
-new file mode 100644
-index 000000000000..868dce2f165c
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp/embed-16.C
-@@ -0,0 +1,18 @@
-+// PR c++/118124
-+// { dg-do compile { target c++11 } }
-+// { dg-options "-O2" }
-+// non-ASCII chars here: áéí
-+
-+namespace std {
-+template <class T> struct initializer_list {
-+private:
-+  const T *_M_array;
-+  __SIZE_TYPE__ _M_len;
-+};
-+}
-+struct A {
-+  A (std::initializer_list<signed char>);
-+};
-+A a {
-+#embed __FILE__
-+};    // { dg-error "narrowing conversion of '\[0-9]*' from 'int' to 'signed 
char'" }
-diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-opt3.C 
b/gcc/testsuite/g++.dg/cpp0x/initlist-opt3.C
-new file mode 100644
-index 000000000000..fa279882322d
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-opt3.C
-@@ -0,0 +1,47 @@
-+// PR c++/118124
-+// { dg-do compile { target c++11 } }
-+// { dg-options "-O2" }
-+
-+namespace std {
-+template <class T> struct initializer_list {
-+private:
-+  const T *_M_array;
-+  __SIZE_TYPE__ _M_len;
-+};
-+}
-+struct A {
-+  A (std::initializer_list<char>);
-+};
-+A a { 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7,
-+      8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-+      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,
-+      2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
-+      4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5,
-+      6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };
-+struct B {
-+  B (std::initializer_list<unsigned char>);
-+};
-+B b { 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7,
-+      8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-+      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,
-+      2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
-+      4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5,
-+      6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };
-+struct C {
-+  C (std::initializer_list<int>);
-+};
-+C c { 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7,
-+      8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-+      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,
-+      2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
-+      4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5,
-+      6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };
-+struct D {
-+  D (std::initializer_list<float>);
-+};
-+D d { 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7,
-+      8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-+      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,
-+      2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
-+      4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5,
-+      6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };
-diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-opt4.C 
b/gcc/testsuite/g++.dg/cpp0x/initlist-opt4.C
-new file mode 100644
-index 000000000000..080dee3cf026
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-opt4.C
-@@ -0,0 +1,20 @@
-+// PR c++/118124
-+// { dg-do compile { target c++11 } }
-+// { dg-options "-O2" }
-+
-+namespace std {
-+template <class T> struct initializer_list {
-+private:
-+  const T *_M_array;
-+  __SIZE_TYPE__ _M_len;
-+};
-+}
-+struct A {
-+  A (std::initializer_list<signed char>);
-+};
-+A a { 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7,
-+      8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
-+      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,
-+      2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 209, 0, 1, 2, 3,
-+      4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5,
-+      6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };   // { 
dg-error "narrowing conversion of '209' from 'int' to 'signed char'" }
-
-base-commit: 670df03e5294a31efff1554c9a751ef893dc1f71
--- 
-2.47.1
-

Reply via email to