From b3416a9a6256daa997cb59fe0b17fefe5e712a2f Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Tue, 8 Oct 2019 13:38:35 +0000 Subject: [PATCH] PR c++/91740 - ICE with constexpr call and ?: in ARRAY_REF. * pt.c (build_non_dependent_expr): Call build_non_dependent_expr for the first operand. From-SVN: r276699 --- gcc/cp/ChangeLog | 9 +++++++++ gcc/cp/pt.c | 2 +- gcc/testsuite/g++.dg/cpp1y/var-templ63.C | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp1y/var-templ63.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 297eb6f0e9b2..9a9dc437231b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2019-10-08 Marek Polacek + + Backported from mainline + 2019-09-15 Marek Polacek + + PR c++/91740 - ICE with constexpr call and ?: in ARRAY_REF. + * pt.c (build_non_dependent_expr): Call build_non_dependent_expr for + the first operand. + 2019-09-28 Marek Polacek Backported from mainline diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 34d440c7eb58..442e01bfa117 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -26715,7 +26715,7 @@ build_non_dependent_expr (tree expr) if (TREE_CODE (expr) == COND_EXPR) return build3 (COND_EXPR, TREE_TYPE (expr), - TREE_OPERAND (expr, 0), + build_non_dependent_expr (TREE_OPERAND (expr, 0)), (TREE_OPERAND (expr, 1) ? build_non_dependent_expr (TREE_OPERAND (expr, 1)) : build_non_dependent_expr (TREE_OPERAND (expr, 0))), diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ63.C b/gcc/testsuite/g++.dg/cpp1y/var-templ63.C new file mode 100644 index 000000000000..a65f53b2963b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/var-templ63.C @@ -0,0 +1,5 @@ +// PR c++/91740 - ICE with constexpr call and ?: in ARRAY_REF. +// { dg-do compile { target c++14 } } + +constexpr bool f(const char*) { return true; } +template const char c = "FOO"[f("BAR") ? 1 : 0]; -- 2.47.2