From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 463C01382C5 for ; Wed, 24 Jun 2020 20:15:53 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 83C9CE09A7; Wed, 24 Jun 2020 20:15:52 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 54581E09A7 for ; Wed, 24 Jun 2020 20:15:52 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 1D31534EE0F for ; Wed, 24 Jun 2020 20:15:51 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id B940A2AB for ; Wed, 24 Jun 2020 20:15:49 +0000 (UTC) From: "Sergei Trofimovich" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sergei Trofimovich" Message-ID: <1593029682.21ed34524e3ab3139c811b6d61f50522ebd2b184.slyfox@gentoo> Subject: [gentoo-commits] proj/gcc-patches:master commit in: 10.1.0/gentoo/ X-VCS-Repository: proj/gcc-patches X-VCS-Files: 10.1.0/gentoo/35_all_ICE-array-subscript-PR95508.patch 10.1.0/gentoo/README.history X-VCS-Directories: 10.1.0/gentoo/ X-VCS-Committer: slyfox X-VCS-Committer-Name: Sergei Trofimovich X-VCS-Revision: 21ed34524e3ab3139c811b6d61f50522ebd2b184 X-VCS-Branch: master Date: Wed, 24 Jun 2020 20:15:49 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 0553cd72-aa0e-4dc3-a4a7-1178c9fa22c1 X-Archives-Hash: bdd0871e4f29f896594bcaa7dad2070f commit: 21ed34524e3ab3139c811b6d61f50522ebd2b184 Author: Sergei Trofimovich gentoo org> AuthorDate: Wed Jun 24 20:14:42 2020 +0000 Commit: Sergei Trofimovich gentoo org> CommitDate: Wed Jun 24 20:14:42 2020 +0000 URL: https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=21ed3452 10.1.0: backport PR95508, ICE on array subscript implicit conversion Reported-by: hsk17 mail.de Bug: https://bugs.gentoo.org/729434 Signed-off-by: Sergei Trofimovich gentoo.org> .../35_all_ICE-array-subscript-PR95508.patch | 106 +++++++++++++++++++++ 10.1.0/gentoo/README.history | 1 + 2 files changed, 107 insertions(+) diff --git a/10.1.0/gentoo/35_all_ICE-array-subscript-PR95508.patch b/10.1.0/gentoo/35_all_ICE-array-subscript-PR95508.patch new file mode 100644 index 0000000..37abd53 --- /dev/null +++ b/10.1.0/gentoo/35_all_ICE-array-subscript-PR95508.patch @@ -0,0 +1,106 @@ +https://gcc.gnu.org/PR95508 +https://bugs.gentoo.org/729434 + +From 1bab254fd30c2b94a675b9057349fc80946375b1 Mon Sep 17 00:00:00 2001 +From: Marek Polacek +Date: Wed, 17 Jun 2020 14:38:05 -0400 +Subject: [PATCH] c++: ICE with IMPLICIT_CONV_EXPR in array subscript [PR95508] + +Since r10-7096 convert_like, when called in a template, creates an +IMPLICIT_CONV_EXPR when we're converting to/from array type. + +In this test, we have e[f], and we're converting f (of type class A) to +int, so convert_like in build_new_op_1 created the IMPLICIT_CONV_EXPR +that got into cp_build_array_ref which calls maybe_constant_value. My +patch above failed to adjust this spot to call fold_non_dependent_expr +instead, which can handle codes like I_C_E in a template. Fixed by +using a new function maybe_fold_non_dependent_expr, which, if the expr +can't be evaluated to a constant, returns the original expression. + +gcc/cp/ChangeLog: + + PR c++/95508 + * constexpr.c (maybe_fold_non_dependent_expr): New. + * cp-tree.h (maybe_fold_non_dependent_expr): Declare. + * typeck.c (cp_build_array_ref): Call maybe_fold_non_dependent_expr + instead of maybe_constant_value. + +gcc/testsuite/ChangeLog: + + PR c++/95508 + * g++.dg/template/conv16.C: New test. +--- + gcc/cp/constexpr.c | 13 +++++++++++++ + gcc/cp/cp-tree.h | 2 ++ + gcc/cp/typeck.c | 2 +- + gcc/testsuite/g++.dg/template/conv16.C | 17 +++++++++++++++++ + 4 files changed, 33 insertions(+), 1 deletion(-) + create mode 100644 gcc/testsuite/g++.dg/template/conv16.C + +--- a/gcc/cp/constexpr.c ++++ b/gcc/cp/constexpr.c +@@ -7043,6 +7043,19 @@ fold_non_dependent_expr (tree t, + return maybe_constant_value (t, object, manifestly_const_eval); + } + ++/* Like fold_non_dependent_expr, but if EXPR couldn't be folded to a constant, ++ return the original expression. */ ++ ++tree ++maybe_fold_non_dependent_expr (tree expr, ++ tsubst_flags_t complain/*=tf_warning_or_error*/) ++{ ++ tree t = fold_non_dependent_expr (expr, complain); ++ if (t && TREE_CONSTANT (t)) ++ return t; ++ ++ return expr; ++} + + /* Like maybe_constant_init but first fully instantiate the argument. */ + +--- a/gcc/cp/cp-tree.h ++++ b/gcc/cp/cp-tree.h +@@ -7955,6 +7955,8 @@ extern tree maybe_constant_init (tree, tree = NULL_TREE, bool = false); + extern tree fold_non_dependent_expr (tree, + tsubst_flags_t = tf_warning_or_error, + bool = false, tree = NULL_TREE); ++extern tree maybe_fold_non_dependent_expr (tree, ++ tsubst_flags_t = tf_warning_or_error); + extern tree fold_non_dependent_init (tree, + tsubst_flags_t = tf_warning_or_error, + bool = false); +--- a/gcc/cp/typeck.c ++++ b/gcc/cp/typeck.c +@@ -3553,7 +3553,7 @@ cp_build_array_ref (location_t loc, tree array, tree idx, + pointer arithmetic.) */ + idx = cp_perform_integral_promotions (idx, complain); + +- idx = maybe_constant_value (idx); ++ idx = maybe_fold_non_dependent_expr (idx, complain); + + /* An array that is indexed by a non-constant + cannot be stored in a register; we must be able to do +--- /dev/null ++++ b/gcc/testsuite/g++.dg/template/conv16.C +@@ -0,0 +1,17 @@ ++// PR c++/95508 ++// { dg-do compile } ++ ++template ++struct A; ++template ++struct B { ++ operator int () { return 0; } ++}; ++template <> ++struct A : B {}; ++struct D { ++ template ++ int foo () { return e[f]; } ++ int e[6]; ++ A f; ++}; +-- +2.27.0 + diff --git a/10.1.0/gentoo/README.history b/10.1.0/gentoo/README.history index 480a54e..72e0086 100644 --- a/10.1.0/gentoo/README.history +++ b/10.1.0/gentoo/README.history @@ -1,6 +1,7 @@ 3 TODO 33_all_avx512-scalar-PR95528.patch 34_all_cet-cross-x86.patch + 35_all_ICE-array-subscript-PR95508.patch 2 11 June 2020 + 29_all_fix-float-hang-PR95118.patch