diff options
author | Richard Biener <rguenther@suse.de> | 2017-12-14 11:13:34 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-12-14 11:13:34 +0000 |
commit | b72805798ac456709eef4a761b84dd1c4a5780e6 (patch) | |
tree | 0385d273d5c80cd5de5908157ae5be03dadb833e /gcc | |
parent | e729c8e003707934687e0da85e4b151a553a28d9 (diff) | |
download | gcc-b72805798ac456709eef4a761b84dd1c4a5780e6.zip gcc-b72805798ac456709eef4a761b84dd1c4a5780e6.tar.gz gcc-b72805798ac456709eef4a761b84dd1c4a5780e6.tar.bz2 |
re PR middle-end/83415 (ICE during gimplification of assignment to read-only vector)
2017-12-14 Richard Biener <rguenther@suse.de>
PR c/83415
c/
* c-fold.c (c_fully_fold_internal): Treat VIEW_CONVERT_EXPR
like REALPART_EXPR for the behavior of whether its operand
is an lvalue.
* gcc.dg/pr83415.c: New testcase.
From-SVN: r255629
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c/c-fold.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr83415.c | 12 |
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 6516e5d..3f5414b 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,10 @@ +2017-12-14 Richard Biener <rguenther@suse.de> + + PR c/83415 + * c-fold.c (c_fully_fold_internal): Treat VIEW_CONVERT_EXPR + like REALPART_EXPR for the behavior of whether its operand + is an lvalue. + 2017-12-12 Marek Polacek <polacek@redhat.com> PR c/82679 diff --git a/gcc/c/c-fold.c b/gcc/c/c-fold.c index 84ce543..49d248d 100644 --- a/gcc/c/c-fold.c +++ b/gcc/c/c-fold.c @@ -434,6 +434,7 @@ c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands, goto unary; case REALPART_EXPR: case IMAGPART_EXPR: + case VIEW_CONVERT_EXPR: op0_lval = lval; /* FALLTHRU */ case INDIRECT_REF: @@ -441,7 +442,6 @@ c_fully_fold_internal (tree expr, bool in_init, bool *maybe_const_operands, case FLOAT_EXPR: CASE_CONVERT: case ADDR_SPACE_CONVERT_EXPR: - case VIEW_CONVERT_EXPR: case NON_LVALUE_EXPR: case NEGATE_EXPR: case BIT_NOT_EXPR: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 811568e..2f2d545 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2017-12-14 Richard Biener <rguenther@suse.de> + PR c/83415 + * gcc.dg/pr83415.c: New testcase. + +2017-12-14 Richard Biener <rguenther@suse.de> + PR tree-optimization/83418 * gcc.dg/torture/pr83418.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/pr83415.c b/gcc/testsuite/gcc.dg/pr83415.c new file mode 100644 index 0000000..5934c16 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83415.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O" } */ + +const short __attribute__((vector_size(16))) y = { 0, 1, 2, 3, 4, 5, 6, 7 }; + +int +main (int argc, short *argv[]) +{ + int i = argc; + y[i] = 7 - i; /* { dg-warning "read-only" } */ + return 0; +} |