From: Markus Trippelsdorf Date: Wed, 25 Nov 2015 16:40:16 +0000 (+0000) Subject: re PR c++/68087 (ICE with constexpr in array with negative index) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c2127564efc152de34ea1a15ce9b20e8ddccfc2c;p=gcc.git re PR c++/68087 (ICE with constexpr in array with negative index) /cp 2015-11-25 Markus Trippelsdorf Paolo Carlini PR c++/68087 * constexpr.c (cxx_eval_array_reference): Use tree_fits_shwi_p before tree_to_shwi to avoid ICEs. /testsuite 2015-11-25 Markus Trippelsdorf Paolo Carlini PR c++/68087 * g++.dg/cpp0x/constexpr-array13.C: New. Co-Authored-By: Paolo Carlini From-SVN: r230886 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a4aa01e3b2a..c94ae5f1cc4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2015-11-25 Markus Trippelsdorf + Paolo Carlini + + PR c++/68087 + * constexpr.c (cxx_eval_array_reference): Use tree_fits_shwi_p before + tree_to_shwi to avoid ICEs. + 2015-11-24 Ilya Verbin * parser.c (cp_parser_oacc_declare): Replace "ifdef ENABLE_OFFLOADING" diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 459173dec07..42e99021f11 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -1799,8 +1799,8 @@ cxx_eval_array_reference (const constexpr_ctx *ctx, tree t, gcc_unreachable (); } - i = tree_to_shwi (index); - if (i < 0) + if (!tree_fits_shwi_p (index) + || (i = tree_to_shwi (index)) < 0) { if (!ctx->quiet) error ("negative array subscript"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 58bd40ab404..e0b16f592e7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-11-25 Markus Trippelsdorf + Paolo Carlini + + PR c++/68087 + * g++.dg/cpp0x/constexpr-array13.C: New. + 2015-11-25 Ilmir Usmanov Cesar Philippidis diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array13.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array13.C new file mode 100644 index 00000000000..13ab5a724b5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array13.C @@ -0,0 +1,6 @@ +// PR c++/68087 +// { dg-do compile { target c++11 } } + +constexpr char c[] = "hello"; +constexpr const char *p = c; +constexpr char ch = *(p-1); // { dg-error "negative array subscript" }