aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-array-notation.c
diff options
context:
space:
mode:
authorIgor Zamyatin <igor.zamyatin@intel.com>2014-08-01 16:54:27 +0000
committerKirill Yukhin <kyukhin@gcc.gnu.org>2014-08-01 16:54:27 +0000
commita7ee52fba0727d98eadb8b6b9adbf42cf88c0914 (patch)
tree6b22b92b1cb7eb59e88beb1c6e546153ce181301 /gcc/c/c-array-notation.c
parent663683746c390061ab8610b8dd848faa77f7e20a (diff)
downloadgcc-a7ee52fba0727d98eadb8b6b9adbf42cf88c0914.zip
gcc-a7ee52fba0727d98eadb8b6b9adbf42cf88c0914.tar.gz
gcc-a7ee52fba0727d98eadb8b6b9adbf42cf88c0914.tar.bz2
re PR c++/61455 (Internal compiler error, and other confused errors, when using array notation)
PR middle-end/61455 gcc/c-family/ * array-notation-common.c (extract_array_notation_exprs): Handling of DECL_EXPR added. gcc/c/ * c-array-notation.c (expand_array_notations): Handling of DECL_EXPR added. gcc/cp/ * cp-array-notation.c (expand_array_notation_exprs): Handling of DECL_EXPR improved. Changed handling for INIT_EXPR. gcc/testsuite/ * c-c++-common/cilk-plus/AN/pr61455.c: New test. * c-c++-common/cilk-plus/AN/pr61455-2.c: Likewise. From-SVN: r213491
Diffstat (limited to 'gcc/c/c-array-notation.c')
-rw-r--r--gcc/c/c-array-notation.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/c/c-array-notation.c b/gcc/c/c-array-notation.c
index 67a8931..597adc9 100644
--- a/gcc/c/c-array-notation.c
+++ b/gcc/c/c-array-notation.c
@@ -1265,6 +1265,25 @@ expand_array_notations (tree *tp, int *walk_subtrees, void *)
rhs_loc, rhs, TREE_TYPE (rhs));
}
break;
+ case DECL_EXPR:
+ {
+ tree x = DECL_EXPR_DECL (*tp);
+ if (DECL_INITIAL (x))
+ {
+ location_t loc = DECL_SOURCE_LOCATION (x);
+ tree lhs = x;
+ tree rhs = DECL_INITIAL (x);
+ DECL_INITIAL (x) = NULL;
+ tree new_modify_expr = build_modify_expr (loc, lhs,
+ TREE_TYPE (lhs),
+ NOP_EXPR,
+ loc, rhs,
+ TREE_TYPE(rhs));
+ expand_array_notations (&new_modify_expr, walk_subtrees, NULL);
+ *tp = new_modify_expr;
+ }
+ }
+ break;
case CALL_EXPR:
*tp = fix_array_notation_call_expr (*tp);
break;