diff options
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-array13.C | 6 |
4 files changed, 21 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a4aa01e..c94ae5f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2015-11-25 Markus Trippelsdorf <markus@trippelsdorf.de> + Paolo Carlini <paolo.carlini@oracle.com> + + 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 <ilya.verbin@intel.com> * parser.c (cp_parser_oacc_declare): Replace "ifdef ENABLE_OFFLOADING" diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 459173de..42e9902 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 58bd40a..e0b16f5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-11-25 Markus Trippelsdorf <markus@trippelsdorf.de> + Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/68087 + * g++.dg/cpp0x/constexpr-array13.C: New. + 2015-11-25 Ilmir Usmanov <me@ilmir.us> Cesar Philippidis <cesar@codesourcery.com> 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 0000000..13ab5a7 --- /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" } |