diff options
Diffstat (limited to 'sys-devel')
-rw-r--r-- | sys-devel/Manifest.gz | bin | 6220 -> 6218 bytes | |||
-rw-r--r-- | sys-devel/gcc/Manifest | 2 | ||||
-rw-r--r-- | sys-devel/gcc/files/gcc-15.0.1_pre20250223-c-Fix-range-for-with-PMFs-PR118923.patch | 231 | ||||
-rw-r--r-- | sys-devel/gcc/gcc-15.0.1_pre20250223-r1.ebuild | 53 |
4 files changed, 286 insertions, 0 deletions
diff --git a/sys-devel/Manifest.gz b/sys-devel/Manifest.gz Binary files differindex e25afe14eb13..a1acd7f97b05 100644 --- a/sys-devel/Manifest.gz +++ b/sys-devel/Manifest.gz diff --git a/sys-devel/gcc/Manifest b/sys-devel/gcc/Manifest index 3e547e0230bf..ceb3784fd903 100644 --- a/sys-devel/gcc/Manifest +++ b/sys-devel/gcc/Manifest @@ -1,5 +1,6 @@ AUX gcc-13-fix-cross-fixincludes.patch 883 BLAKE2B 1ae33195320754c55f42e1206bcfdf98914af5190df5939a4c7b072a2bc25216c354ea5d76f5171e1b8a150ca7764bdf57cea1bc137c237a5e8bb44713885f1b SHA512 ca9625001f0a10826d75691fdba35ca5783ed2f80e605b935785f8dc7591b0e650dca28bf1fc7e688e27547dddc7ab38232459b4f1865ed10a148978d0e09703 AUX gcc-14.2.1_p20241221-arm-Revert-arm-MVE-intrinsics-Fix-support-for-predicate-.patch 5160 BLAKE2B f229bc58851d348a67d636d65878166479f2eb735dddc6368e21c2cc5b1c2b8660b1c87024c1637a25a9acf609662823337307f21fe9a51fe9cbfc6fdcbb0a16 SHA512 c62e991b826cee7258abfa3f1305fc33b8b0e0dce2aaa1ae5a753b547126d9dde6632894eb72e46c6c78c9777029a7593a4f9afbb6a3ac6d831c63ea0c19decd +AUX gcc-15.0.1_pre20250223-c-Fix-range-for-with-PMFs-PR118923.patch 7059 BLAKE2B 20118efd091888c495b25a1fc9372931a328336fe94fd43c084419557c44b054859ff98283e66cc59d633a3402c9b7260fe84344502c3e5a42f234cd51afaf5f SHA512 1b19210be96e337abf1cd2cc6879f7e418aadaa098314013b80c0adf767ad9bb7923aee72bca25d148482f1779550bf70f280adeac1538963fb8ded51365c172 AUX gcc-configure-texinfo.patch 341 BLAKE2B d2ea3b2ea08f5d3a498ba27d0fb95e325097e2104e55caa28b66515cb48662649140d90b639369aedc54b2b1178fa4b49cda442f5f504e09d88a2efa45a5057c SHA512 e8d34c5077409df5495cf0c5fbf5e77f841c5698108fa6a5fde33eb28202c685603bdefd8368918e55f30c4b995e895d71d64c715c1ec2b017e09eb2c54c09ff DIST gcc-10.5.0-musl-patches-2.tar.xz 3452 BLAKE2B 5387e516d07d81477b3f39b8b3bd986bf861d32cd25dc5481c97bd3620d00c918c5661e86857f66dbf28a655401a53e43417f638c443e44cbfdbf5e950caac4d SHA512 86f2ce31cc4fc4fb5a6043fb527bf822d895e1a6220652024f78a1cbd5a962edb6be8dc5f43c32053e075f39bb2350ea8f14e7d57e0473dd2933a7b44676bde5 DIST gcc-10.5.0-patches-6.tar.xz 18208 BLAKE2B 4cac3340108fb378c76ad62b728429f3c97f348d178744e7536575f3576ca8aa682b878b7df3b1c162dccae64a3cb56c66d8d60eae323e1ece2de4278084fdbd SHA512 9d6c84325fbc118cee01347468ce729c278e5b026b16da945fe54050726e26f86a46ee7b71a01a47cf927b70bfcce459c49a6bc4fb93dcfaa047c76d4c5bc5bc @@ -47,6 +48,7 @@ EBUILD gcc-14.2.1_p20241221.ebuild 1537 BLAKE2B c7c007768b41459ce15112d6b1847aba EBUILD gcc-14.2.1_p20250222.ebuild 1440 BLAKE2B 403218e223a17ec1336d65ecc52686145d09d644278a3edd92af74ca9d83d172c14ccac9250f6c968976a5b3ebdc9ed6f6bd9194ae08c167d5c53cb65e83009c SHA512 bafbc66c0d28630b563f419d73c165f954e98ee03b9f92a859383957c2f980d8b9f6648056b13a9e7a17d99b406e58adebd86b02be0975f6daec10bc0aac5077 EBUILD gcc-14.3.9999.ebuild 1410 BLAKE2B 0f77f0e17b7bf3d617ed4feec61406108d92e9ac8bd3597651b7f6814c45ddf56393228cda23fccf189e3fa106b9d389196da4f565283a10923bfe29a06fbfe2 SHA512 802582faf27fe46fcd75b8b917aa155739e4e0f70d010f14bf42cea3007da124a53fe1ee903e6004d4d8277350ac88d7ade78f79ce8a036b29e14dec45ba2d15 EBUILD gcc-15.0.1_pre20250216.ebuild 1360 BLAKE2B 4212d360f6f9ca7db4090606330079f41f1c9610d32b6baccb64a1d20b39ee16c4517e90040a4fd1cf089cb0195543d57124a73452d8128cfbfef2b651732f53 SHA512 7286c47637b84199caf031fadf163893a8abb0d7533ac2a4759fac3e9d81936ff45b7c15afa8b53174e5e6b38b6a4821a11daa0a27c658ca41aa47393008ece5 +EBUILD gcc-15.0.1_pre20250223-r1.ebuild 1427 BLAKE2B f96bc8e59d6194d6141d073edd11d343cd97fb7637973f36807171cc6ac0c6e5925f26874810d3a92ab190976bc5df7cbb1c87b175c014ec1a0287c04d74c8bc SHA512 0d6668d0b13f57c14b659c169f9d5959d84c537857f257c1df89a73704542c11fec08c5cc318fb45d3173d44c141bdc54897bc68e3b6fda5bbda33670ec7a73c EBUILD gcc-15.0.1_pre20250223.ebuild 1360 BLAKE2B 4212d360f6f9ca7db4090606330079f41f1c9610d32b6baccb64a1d20b39ee16c4517e90040a4fd1cf089cb0195543d57124a73452d8128cfbfef2b651732f53 SHA512 7286c47637b84199caf031fadf163893a8abb0d7533ac2a4759fac3e9d81936ff45b7c15afa8b53174e5e6b38b6a4821a11daa0a27c658ca41aa47393008ece5 EBUILD gcc-15.0.9999.ebuild 1332 BLAKE2B 6f17f77603522bac72d4d57094cc086263a9bfe6273c04d91b169ebc23d78fa2943c0950d4a40fe846d9d92648e54ca54ad1cecd5446ed5710062f9dca569b4b SHA512 4e4a673229a36dee68238e10efb2d9e0ff1c530411395e5230bbf567c92342a4b79d0ecb0ec91573c52fd8b5efd5cf6d20e612971848c9529378e0c42c0e213d EBUILD gcc-8.5.0-r2.ebuild 549 BLAKE2B 2856372670c76fbe54778c0532815e3510b01b1c8aad99acc3e9183bf6829251952e29887340895625c1e421e19302430ae1a0a8dddcd8470bd71cc221f0b6b0 SHA512 559ba0dbdc7542b6af5d101f19a5b3c9eab38b9996c26330834ffa924fd8c792988f223b492e6ac84255eccbc4af762be50c2d60e84ca24b7a9ebba134608c6d diff --git a/sys-devel/gcc/files/gcc-15.0.1_pre20250223-c-Fix-range-for-with-PMFs-PR118923.patch b/sys-devel/gcc/files/gcc-15.0.1_pre20250223-c-Fix-range-for-with-PMFs-PR118923.patch new file mode 100644 index 000000000000..04cf198fb673 --- /dev/null +++ b/sys-devel/gcc/files/gcc-15.0.1_pre20250223-c-Fix-range-for-with-PMFs-PR118923.patch @@ -0,0 +1,231 @@ +From a41b3f54c13890b1327bb3d4fbae8f7feb37d00b Mon Sep 17 00:00:00 2001 +Message-ID: <a41b3f54c13890b1327bb3d4fbae8f7feb37d00b.1740542521.git.sam@gentoo.org> +From: Jakub Jelinek <jakub@redhat.com> +Date: Tue, 25 Feb 2025 09:26:46 +0100 +Subject: [PATCH] c++: Fix range for with PMFs [PR118923] + +The following testcases segfault because the new range for -frange-for-ext-temps +temporary extension extends even the internal TARGET_EXPRs created by +get_member_function_from_ptrfunc. + +The following patch fixes that by using get_internal_target_expr for those +instead of force_target_expr (similarly in cp_finish_decl and +build_comparison_op) and using force_target_expr inside of +get_internal_target_expr. + +2025-02-25 Jakub Jelinek <jakub@redhat.com> + + PR c++/118923 + * tree.cc (get_internal_target_expr): Use force_target_expr + instead of build_target_expr_with_type. + * typeck.cc (get_member_function_from_ptrfunc): Use + get_internal_target_expr instead of force_target_expr. + * decl.cc (cp_finish_decl): Likewise. + * method.cc (build_comparison_op): Likewise. + + * g++.dg/cpp0x/pr118923.C: New test. + * g++.dg/cpp1y/pr118923.C: New test. +--- + gcc/cp/decl.cc | 6 +-- + gcc/cp/method.cc | 2 +- + gcc/cp/tree.cc | 3 +- + gcc/cp/typeck.cc | 6 +-- + gcc/testsuite/g++.dg/cpp0x/pr118923.C | 66 +++++++++++++++++++++++++++ + gcc/testsuite/g++.dg/cpp1y/pr118923.C | 38 +++++++++++++++ + 6 files changed, 110 insertions(+), 11 deletions(-) + create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr118923.C + create mode 100644 gcc/testsuite/g++.dg/cpp1y/pr118923.C + +diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc +index 05ad9bb24d59..936e48e907e2 100644 +--- a/gcc/cp/decl.cc ++++ b/gcc/cp/decl.cc +@@ -9377,8 +9377,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, + tree guard = NULL_TREE; + if (cleanups || cleanup) + { +- guard = force_target_expr (boolean_type_node, +- boolean_false_node, tf_none); ++ guard = get_internal_target_expr (boolean_false_node); + add_stmt (guard); + guard = TARGET_EXPR_SLOT (guard); + } +@@ -9407,8 +9406,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, + popped that all, so push those extra cleanups around + the whole sequence with a guard variable. */ + gcc_assert (TREE_CODE (sl) == STATEMENT_LIST); +- guard = force_target_expr (integer_type_node, +- integer_zero_node, tf_none); ++ guard = get_internal_target_expr (integer_zero_node); + add_stmt (guard); + guard = TARGET_EXPR_SLOT (guard); + for (unsigned i = 0; i < n_extra_cleanups; ++i) +diff --git a/gcc/cp/method.cc b/gcc/cp/method.cc +index 3914bbb1ef23..05c19cf0661e 100644 +--- a/gcc/cp/method.cc ++++ b/gcc/cp/method.cc +@@ -1597,7 +1597,7 @@ build_comparison_op (tree fndecl, bool defining, tsubst_flags_t complain) + /* Some other array, will need runtime loop. */ + else + { +- idx = force_target_expr (sizetype, maxval, complain); ++ idx = get_internal_target_expr (maxval); + loop_indexes = tree_cons (idx, NULL_TREE, loop_indexes); + } + expr_type = TREE_TYPE (expr_type); +diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc +index 5628a576f01b..5863b6878f02 100644 +--- a/gcc/cp/tree.cc ++++ b/gcc/cp/tree.cc +@@ -982,8 +982,7 @@ tree + get_internal_target_expr (tree init) + { + init = convert_bitfield_to_declared_type (init); +- tree t = build_target_expr_with_type (init, TREE_TYPE (init), +- tf_warning_or_error); ++ tree t = force_target_expr (TREE_TYPE (init), init, tf_warning_or_error); + TARGET_EXPR_INTERNAL_P (t) = true; + return t; + } +diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc +index a9c32ff930d5..bbaca960bd7c 100644 +--- a/gcc/cp/typeck.cc ++++ b/gcc/cp/typeck.cc +@@ -4219,16 +4219,14 @@ get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function, + && !DECL_P (instance_ptr) + && !TREE_CONSTANT (instance_ptr))) + instance_ptr = instance_save_expr +- = force_target_expr (TREE_TYPE (instance_ptr), instance_ptr, +- complain); ++ = get_internal_target_expr (instance_ptr); + + /* See above comment. */ + if (TREE_SIDE_EFFECTS (function) + || (!nonvirtual + && !DECL_P (function) + && !TREE_CONSTANT (function))) +- function +- = force_target_expr (TREE_TYPE (function), function, complain); ++ function = get_internal_target_expr (function); + + /* Start by extracting all the information from the PMF itself. */ + e3 = pfn_from_ptrmemfunc (function); +diff --git a/gcc/testsuite/g++.dg/cpp0x/pr118923.C b/gcc/testsuite/g++.dg/cpp0x/pr118923.C +new file mode 100644 +index 000000000000..55d3052b61f3 +--- /dev/null ++++ b/gcc/testsuite/g++.dg/cpp0x/pr118923.C +@@ -0,0 +1,66 @@ ++// PR c++/118923 ++// { dg-do run { target c++11 } } ++// { dg-additional-options "-frange-for-ext-temps" { target c++23 } } ++// { dg-additional-options "-fno-range-for-ext-temps" { target c++20_down } } ++ ++int g; ++ ++struct A { ++ int a[3]; ++ A (int x, int y, int z) : a{x, y, z} { if ((g++ & 7) != 4) __builtin_abort (); } ++ A (const A &x) = delete; ++ ~A () { if ((g++ & 7) != 7 - 2 * (__cpp_range_based_for >= 202211)) __builtin_abort (); } ++ int *begin () { return a; } ++ int *end () { return a + 3; } ++}; ++ ++struct B { ++ B () { if ((g++ & 7) != 3) __builtin_abort (); } ++ B (const B &) = delete; ++ ~B () { if ((g++ & 7) != 5 + (__cpp_range_based_for >= 202211)) __builtin_abort (); } ++}; ++ ++struct C { ++ A foo (const B &) { return { 1, 2, 3 }; } ++ A bar (const B &) { return { 4, 5, 6 }; } ++ bool baz () { return b; } ++ bool b = false; ++ static C c; ++}; ++ ++C C::c; ++ ++struct D { ++ D () { if ((g++ & 5) != 0) __builtin_abort (); } ++ D (const D &) = delete; ++ ~D () { if ((g & 7) != 1 && (g & 7) != 6 + (__cpp_range_based_for >= 202211)) __builtin_abort (); g++; } ++}; ++ ++inline C * ++qux (const D &) ++{ ++ return &C::c; ++} ++ ++void ++foo () ++{ ++ int z = 1; ++ auto d = qux (D {})->baz () ? &C::bar : &C::foo; ++ for (const int &r : (qux (D {})->*d) (B {})) ++ if (z++ != r) ++ __builtin_abort (); ++ C::c.b = true; ++ d = qux (D {})->baz () ? &C::bar : &C::foo; ++ for (const int &r : (qux (D {})->*d) (B {})) ++ if (z++ != r) ++ __builtin_abort (); ++} ++ ++int ++main () ++{ ++ foo (); ++ if (g != 16) ++ __builtin_abort (); ++} +diff --git a/gcc/testsuite/g++.dg/cpp1y/pr118923.C b/gcc/testsuite/g++.dg/cpp1y/pr118923.C +new file mode 100644 +index 000000000000..b375f47a7d0f +--- /dev/null ++++ b/gcc/testsuite/g++.dg/cpp1y/pr118923.C +@@ -0,0 +1,38 @@ ++// PR c++/118923 ++// { dg-do run { target c++14 } } ++ ++struct A { ++ int a[3] = { 0, 0, 0 }; ++ int *begin () { return a; } ++ int *end () { return a + 3; } ++}; ++ ++struct B { ++ A foo () { return { 1, 2, 3 }; } ++ A bar () { return { 1, 2, 3 }; } ++ bool baz () { return b; } ++ bool b = false; ++ static B c; ++}; ++ ++B B::c; ++ ++inline B * ++qux () ++{ ++ return &B::c; ++} ++ ++void ++foo () ++{ ++ auto d = qux ()->baz () ? &B::foo : &B::bar; ++ for (const int &r : (qux ()->*d) ()) ++ ; ++} ++ ++int ++main () ++{ ++ foo (); ++} +-- +2.48.1 + diff --git a/sys-devel/gcc/gcc-15.0.1_pre20250223-r1.ebuild b/sys-devel/gcc/gcc-15.0.1_pre20250223-r1.ebuild new file mode 100644 index 000000000000..a4f89c791044 --- /dev/null +++ b/sys-devel/gcc/gcc-15.0.1_pre20250223-r1.ebuild @@ -0,0 +1,53 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +TOOLCHAIN_PATCH_DEV="sam" +TOOLCHAIN_HAS_TESTS=1 +PATCH_GCC_VER="15.0.0" +PATCH_VER="46" +MUSL_VER="2" +MUSL_GCC_VER="15.0.0" +PYTHON_COMPAT=( python3_{10..12} ) + +if [[ -n ${TOOLCHAIN_GCC_RC} ]] ; then + # Cheesy hack for RCs + MY_PV=$(ver_cut 1).$((($(ver_cut 2) + 1))).$((($(ver_cut 3) - 1)))-RC-$(ver_cut 5) + MY_P=${PN}-${MY_PV} + GCC_TARBALL_SRC_URI="mirror://gcc/snapshots/${MY_PV}/${MY_P}.tar.xz" + TOOLCHAIN_SET_S=no + S="${WORKDIR}"/${MY_P} +fi + +inherit toolchain + +if tc_is_live ; then + # Needs to be after inherit (for now?), bug #830908 + EGIT_BRANCH=master +elif [[ -z ${TOOLCHAIN_USE_GIT_PATCHES} ]] ; then + # Don't keyword live ebuilds + #KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" + :; +fi + +if [[ ${CATEGORY} != cross-* ]] ; then + # Technically only if USE=hardened *too* right now, but no point in complicating it further. + # If GCC is enabling CET by default, we need glibc to be built with support for it. + # bug #830454 + RDEPEND="elibc_glibc? ( sys-libs/glibc[cet(-)?] )" + DEPEND="${RDEPEND}" +fi + +src_prepare() { + local p upstreamed_patches=( + # add them here + ) + for p in "${upstreamed_patches[@]}"; do + rm -v "${WORKDIR}/patch/${p}" || die + done + + toolchain_src_prepare + eapply "${FILESDIR}"/${P}-c-Fix-range-for-with-PMFs-PR118923.patch + eapply_user +} |