fix pr c/57577
authorBalaji V. Iyer <balaji.v.iyer@intel.com>
Wed, 12 Jun 2013 22:03:20 +0000 (22:03 +0000)
committerBalaji V. Iyer <bviyer@gcc.gnu.org>
Wed, 12 Jun 2013 22:03:20 +0000 (15:03 -0700)
fix pr c/57577
gcc/c/ChangeLog
+2013-06-12  Balaji V. Iyer  <balaji.v.iyer@intel.com>
+
+       * c-array-notation.c (build_array_notation_expr): Reject array notation
+       mismatch between LHS and RHS even inside a call_expr.  Also, removed
+       a couple while statements that were dead code.
+

gcc/testsuite/ChangeLog
+2013-06-12  Balaji V. Iyer  <balaji.v.iyer@intel.com>
+
+       PR c/57577
+       * c-c++-common/cilk-plus/AN/pr57577.c: New testcase.
+

From-SVN: r200043

gcc/c/ChangeLog
gcc/c/c-array-notation.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/cilk-plus/AN/pr57577.c [new file with mode: 0644]

index 72d182bbae3f87548ce25d500567ef2be7fa3818..6179c3bb546536d1d17878044b6c186f43081712 100644 (file)
@@ -1,3 +1,9 @@
+2013-06-12  Balaji V. Iyer  <balaji.v.iyer@intel.com>
+
+       * c-array-notation.c (build_array_notation_expr): Reject array notation
+       mismatch between LHS and RHS even inside a call_expr.  Also, removed
+       a couple while statements that were dead code.
+
 2013-06-10  Balaji V. Iyer  <balaji.v.iyer@intel.com>
 
        * c-array-notation.c (fix_builtin_array_notation_fn): Fully folded
index 32859691cc328113fcc27a9185ca8af0a169eced..03b66b9cf794b9abe536d509036c5af804377013 100644 (file)
@@ -781,7 +781,7 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
   rhs_list_size = vec_safe_length (rhs_list);
   lhs_list_size = vec_safe_length (lhs_list);
   
-  if (lhs_rank == 0 && rhs_rank != 0 && TREE_CODE (rhs) != CALL_EXPR)
+  if (lhs_rank == 0 && rhs_rank != 0)
     {
       tree rhs_base = rhs;
       if (TREE_CODE (rhs_base) == ARRAY_NOTATION_REF)
@@ -802,17 +802,6 @@ build_array_notation_expr (location_t location, tree lhs, tree lhs_origtype,
     }
   if (lhs_rank != 0 && rhs_rank != 0 && lhs_rank != rhs_rank)
     {
-      tree lhs_base = lhs;
-      tree rhs_base = rhs;
-      
-      for (ii = 0; ii < lhs_rank; ii++)
-       lhs_base = ARRAY_NOTATION_ARRAY (lhs_base);
-
-      while (rhs_base && TREE_CODE (rhs_base) != ARRAY_NOTATION_REF)
-       rhs_base = TREE_OPERAND (rhs_base, 0);
-      for (ii = 0; ii < rhs_rank; ii++)
-       rhs_base = ARRAY_NOTATION_ARRAY (rhs_base);
-      
       error_at (location, "rank mismatch between %qE and %qE", lhs, rhs);
       pop_stmt_list (an_init);
       return error_mark_node;
index b167e4c3d479622582c705fcb446b442317b0435..5c45e1a20a97b72e1217b385cc32a74e631b3d5c 100644 (file)
@@ -1,3 +1,8 @@
+2013-06-12  Balaji V. Iyer  <balaji.v.iyer@intel.com>
+
+       PR c/57577
+       * c-c++-common/cilk-plus/AN/pr57577.c: New testcase.
+
 2013-06-12  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/38958
diff --git a/gcc/testsuite/c-c++-common/cilk-plus/AN/pr57577.c b/gcc/testsuite/c-c++-common/cilk-plus/AN/pr57577.c
new file mode 100644 (file)
index 0000000..fb3490e
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus" } */
+
+int A[10], B[10][10];
+int foo (int a);
+
+int main () {
+  A[:] = foo (B[:][:]); /* { dg-error "rank mismatch between" } */
+  A[0] = foo (B[:][:]); /* { dg-error "cannot be scalar when" } */
+  return 0;
+}