From: Jakub Jelinek Date: Fri, 8 Nov 2019 18:52:44 +0000 (+0100) Subject: backport: re PR c++/92015 (internal compiler error: in cxx_eval_array_reference,... X-Git-Tag: releases/gcc-9.3.0~416 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d4f74f3c3ae9ebf305495177ae96b2173cfabcc;p=thirdparty%2Fgcc.git backport: re PR c++/92015 (internal compiler error: in cxx_eval_array_reference, at cp/constexpr.c:2568) Backported from mainline 2019-10-21 Jakub Jelinek PR c++/92015 * constexpr.c (cxx_eval_component_reference, cxx_eval_bit_field_ref): Use STRIP_ANY_LOCATION_WRAPPER on CONSTRUCTOR elts. * g++.dg/cpp0x/constexpr-92015.C: New test. From-SVN: r277980 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 86007bde317f..b8a9441ffc82 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2019-11-08 Jakub Jelinek + + Backported from mainline + 2019-10-21 Jakub Jelinek + + PR c++/92015 + * constexpr.c (cxx_eval_component_reference, cxx_eval_bit_field_ref): + Use STRIP_ANY_LOCATION_WRAPPER on CONSTRUCTOR elts. + 2019-10-29 Jakub Jelinek PR c++/92201 diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index a229b48d7468..806a812304eb 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -2703,7 +2703,10 @@ cxx_eval_component_reference (const constexpr_ctx *ctx, tree t, : field == part) { if (value) - return value; + { + STRIP_ANY_LOCATION_WRAPPER (value); + return value; + } else /* We're in the middle of initializing it. */ break; @@ -2793,6 +2796,7 @@ cxx_eval_bit_field_ref (const constexpr_ctx *ctx, tree t, FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value) { tree bitpos = bit_position (field); + STRIP_ANY_LOCATION_WRAPPER (value); if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1)) return value; if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 087d24de3510..89f8907e413e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-11-08 Jakub Jelinek + + Backported from mainline + 2019-10-21 Jakub Jelinek + + PR c++/92015 + * g++.dg/cpp0x/constexpr-92015.C: New test. + 2019-11-08 Eric Botcazou * gcc.c-torture/compile/20191108-1.c: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C new file mode 100644 index 000000000000..60f288ee9939 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C @@ -0,0 +1,7 @@ +// PR c++/92015 +// { dg-do compile { target c++11 } } + +struct S1 { char c[6] {'h', 'e', 'l', 'l', 'o', 0}; }; +struct S2 { char c[6] = "hello"; }; +static_assert (S1{}.c[0] == 'h', ""); +static_assert (S2{}.c[0] == 'h', "");