public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-devel/gcc/, sys-devel/gcc/files/
Date: Wed, 12 Apr 2023 07:40:25 +0000 (UTC)	[thread overview]
Message-ID: <1681285160.e753e969fe0d9dffb1a68e4358821cddbf11bca6.sam@gentoo> (raw)

commit:     e753e969fe0d9dffb1a68e4358821cddbf11bca6
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Wed Apr 12 07:38:52 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Apr 12 07:39:20 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e753e969

sys-devel/gcc: backport DSE fix for std::optional for 13

Probably wouldn't do this by itself but given I've just pushed the
SLP fix (989bee28461116343b958e978fe19472fe2ea3cb) and nobody will have built
that yet, let's just do it given it's a miscompilation.

Bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109434
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...gcc-13.0.1_pre20230409-PR109434-DSE-throw.patch | 63 ++++++++++++++++++++++
 sys-devel/gcc/gcc-13.0.1_pre20230409-r3.ebuild     | 58 ++++++++++++++++++++
 2 files changed, 121 insertions(+)

diff --git a/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109434-DSE-throw.patch b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109434-DSE-throw.patch
new file mode 100644
index 000000000000..5d45d8f4e018
--- /dev/null
+++ b/sys-devel/gcc/files/gcc-13.0.1_pre20230409-PR109434-DSE-throw.patch
@@ -0,0 +1,63 @@
+https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=6e3e708dbadaae7b504af7fc4410015624793f02
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109434
+
+From 6e3e708dbadaae7b504af7fc4410015624793f02 Mon Sep 17 00:00:00 2001
+From: Richard Biener <rguenther@suse.de>
+Date: Tue, 11 Apr 2023 15:06:59 +0200
+Subject: [PATCH] tree-optimization/109434 - bogus DSE of throwing call LHS
+
+The byte tracking of call LHS didn't properly handle possibly
+throwing calls correctly which cases bogus DSE and in turn, for the
+testcase a bogus uninit diagnostic and (unreliable) wrong-code.
+
+	PR tree-optimization/109434
+	* tree-ssa-dse.cc (initialize_ao_ref_for_dse): Properly
+	handle possibly throwing calls when processing the LHS
+	and may-defs are not OK.
+
+	* g++.dg/opt/pr109434.C: New testcase.
+--- /dev/null
++++ b/gcc/testsuite/g++.dg/opt/pr109434.C
+@@ -0,0 +1,28 @@
++// { dg-do compile }
++// { dg-require-effective-target c++17 }
++// { dg-options "-O2 -Wall" }
++
++#include <optional>
++#include <stdexcept>
++
++std::optional<int> foo()
++{
++  volatile int x = 1;
++  if (x)
++    throw std::runtime_error("haha");
++  return 42;
++}
++
++int main()
++{
++  std::optional<int> optInt;
++  try {
++      // We falsely DSEd the LHS of the call even though foo throws
++      // which results in an uninitialized diagnostic
++      optInt = foo();
++  } catch (...) {
++      return optInt.has_value();
++  }
++  std::optional<double> optDbl{optInt};
++  return optDbl ? optDbl.value () : 2.0;
++}
+--- a/gcc/tree-ssa-dse.cc
++++ b/gcc/tree-ssa-dse.cc
+@@ -179,7 +179,8 @@ initialize_ao_ref_for_dse (gimple *stmt, ao_ref *write, bool may_def_ok = false)
+     }
+   if (tree lhs = gimple_get_lhs (stmt))
+     {
+-      if (TREE_CODE (lhs) != SSA_NAME)
++      if (TREE_CODE (lhs) != SSA_NAME
++	  && (may_def_ok || !stmt_could_throw_p (cfun, stmt)))
+ 	{
+ 	  ao_ref_init (write, lhs);
+ 	  return true;
+-- 
+2.31.1

diff --git a/sys-devel/gcc/gcc-13.0.1_pre20230409-r3.ebuild b/sys-devel/gcc/gcc-13.0.1_pre20230409-r3.ebuild
new file mode 100644
index 000000000000..073f68b644ac
--- /dev/null
+++ b/sys-devel/gcc/gcc-13.0.1_pre20230409-r3.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+TOOLCHAIN_PATCH_DEV="sam"
+PATCH_VER="9"
+PATCH_GCC_VER="13.1.0"
+MUSL_VER="1"
+MUSL_GCC_VER="13.1.0"
+
+if [[ $(ver_cut 3) == 9999 ]] ; then
+	MY_PV_2=$(ver_cut 2)
+	MY_PV_3=$(($(ver_cut 3) - 9998))
+	if [[ ${MY_PV_2} == 0 ]] ; then
+		MY_PV_2=0
+		MY_PV_3=0
+	else
+		MY_PV_2=$(($(ver_cut 2) - 1))
+	fi
+
+	# e.g. 12.2.9999 -> 12.1.1
+	TOOLCHAIN_GCC_PV=$(ver_cut 1).${MY_PV_2}.${MY_PV_3}
+fi
+
+inherit toolchain
+# Needs to be after inherit (for now?), bug #830908
+EGIT_BRANCH=master
+
+# Don't keyword live ebuilds
+if ! tc_is_live && [[ -z ${TOOLCHAIN_USE_GIT_PATCHES} ]] ; then
+#	KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+	KEYWORDS="~loong"
+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}"
+	BDEPEND=">=${CATEGORY}/binutils-2.30[cet(-)?]"
+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}-PR109469-SLP-returns-twice.patch
+	eapply "${FILESDIR}"/${P}-PR109434-DSE-throw.patch
+	eapply_user
+}


             reply	other threads:[~2023-04-12  7:40 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-12  7:40 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-11-19  3:52 [gentoo-commits] repo/gentoo:master commit in: sys-devel/gcc/, sys-devel/gcc/files/ Sam James
2024-06-25  0:11 Sam James
2024-03-07 18:37 Sam James
2024-02-19  5:06 Sam James
2023-10-18 19:33 Sam James
2023-05-16  6:07 Sam James
2023-05-03 12:32 Sam James
2023-04-26 14:14 Sam James
2023-04-17 12:05 Sam James
2023-04-12 13:23 Sam James
2023-04-12  7:35 Sam James
2023-04-05  1:18 Sam James
2022-08-22  1:41 Sam James
2022-08-19 18:05 Sam James
2021-11-18  5:25 Sam James
2020-02-06 19:19 Sergei Trofimovich
2019-05-03 21:49 Andreas K. Hüttel
2017-11-19 13:40 Andreas Hüttel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1681285160.e753e969fe0d9dffb1a68e4358821cddbf11bca6.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox