From f6b304634e9e270241b68edf6b0dbac9f1456512 Mon Sep 17 00:00:00 2001 From: paolo Date: Wed, 25 Nov 2015 16:40:16 +0000 Subject: [PATCH] /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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230886 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 7 +++++++ gcc/cp/constexpr.c | 4 ++-- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/cpp0x/constexpr-array13.C | 6 ++++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-array13.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a4aa01e3b2ac..c94ae5f1cc46 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 459173dec071..42e99021f11f 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 58bd40ab4043..e0b16f592e79 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 000000000000..13ab5a724b56 --- /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" } -- 2.47.2