diff options
Diffstat (limited to 'gcc/c/c-array-notation.c')
-rw-r--r-- | gcc/c/c-array-notation.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gcc/c/c-array-notation.c b/gcc/c/c-array-notation.c index 0807466..bcd0922 100644 --- a/gcc/c/c-array-notation.c +++ b/gcc/c/c-array-notation.c @@ -1879,7 +1879,7 @@ fix_conditional_array_notations_1 (tree stmt) if (!find_rank (location, cond, cond, false, &rank)) return error_mark_node; - extract_array_notation_exprs (cond, false, &array_list); + extract_array_notation_exprs (stmt, false, &array_list); loop_init = push_stmt_list (); for (ii = 0; ii < vec_safe_length (array_list); ii++) { @@ -1899,12 +1899,12 @@ fix_conditional_array_notations_1 (tree stmt) vec_safe_push (sub_list, array_node); vec_safe_push (new_var_list, new_var); add_stmt (builtin_loop); - replace_array_notations (&cond, false, sub_list, new_var_list); + replace_array_notations (&stmt, false, sub_list, new_var_list); } } } - if (!find_rank (location, cond, cond, true, &rank)) + if (!find_rank (location, stmt, stmt, true, &rank)) { pop_stmt_list (loop_init); return error_mark_node; @@ -1915,7 +1915,7 @@ fix_conditional_array_notations_1 (tree stmt) pop_stmt_list (loop_init); return loop_init; } - extract_array_notation_exprs (cond, true, &array_list); + extract_array_notation_exprs (stmt, true, &array_list); if (vec_safe_length (array_list) == 0) return stmt; @@ -2765,6 +2765,18 @@ expand_array_notation_exprs (tree t) expand_array_notation_exprs (*tsi_stmt_ptr (ii_tsi)); } return t; + case MODIFY_EXPR: + { + location_t loc = EXPR_HAS_LOCATION (t) ? EXPR_LOCATION (t) : + UNKNOWN_LOCATION; + tree lhs = TREE_OPERAND (t, 0); + tree rhs = TREE_OPERAND (t, 1); + location_t rhs_loc = EXPR_HAS_LOCATION (rhs) ? EXPR_LOCATION (rhs) : + UNKNOWN_LOCATION; + t = build_array_notation_expr (loc, lhs, TREE_TYPE (lhs), NOP_EXPR, + rhs_loc, rhs, TREE_TYPE (rhs)); + return t; + } case CALL_EXPR: t = fix_array_notation_call_expr (t); return t; |