re PR c/35738 (ICE with #pragma omp atomic and conversion from pointer to int)
authorJakub Jelinek <jakub@redhat.com>
Thu, 3 Apr 2008 21:03:54 +0000 (23:03 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 3 Apr 2008 21:03:54 +0000 (23:03 +0200)
PR c/35738
* c-parser.c (c_parser_omp_atomic): Call
default_function_array_conversion on the RHS.

* gcc.dg/gomp/pr35738.c: New test.

From-SVN: r133876

gcc/ChangeLog
gcc/c-parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/gomp/pr35738.c [new file with mode: 0644]

index 29a3cce9711d0519707c08ca6a9ff08b0411fa35..a9aad3268d55550883171f293653817294e606f5 100644 (file)
@@ -1,5 +1,9 @@
 2008-04-03  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c/35738
+       * c-parser.c (c_parser_omp_atomic): Call
+       default_function_array_conversion on the RHS.
+
        PR middle-end/35818
        * omp-low.c (scan_sharing_clauses) <case OMP_CLAUSE_SHARED>: Don't
        call is_variable_sized if decl has incomplete type.
index d638a0b2537421b96222748ceeffe207f932eef6..09b635990eed43c7e7349b43858d289c96a47dd6 100644 (file)
@@ -7381,6 +7381,7 @@ c_parser_omp_atomic (c_parser *parser)
   tree lhs, rhs;
   tree stmt;
   enum tree_code code;
+  struct c_expr rhs_expr;
 
   c_parser_skip_to_pragma_eol (parser);
 
@@ -7443,7 +7444,9 @@ c_parser_omp_atomic (c_parser *parser)
        }
 
       c_parser_consume_token (parser);
-      rhs = c_parser_expression (parser).value;
+      rhs_expr = c_parser_expression (parser);
+      rhs_expr = default_function_array_conversion (rhs_expr);
+      rhs = rhs_expr.value;
       break;
     }
   stmt = c_finish_omp_atomic (code, lhs, rhs);
index 1bad997c7fa9dac5ec177eee8db34faeae6095b2..c89aa300f220d508b909816f822f1266deb1ab32 100644 (file)
@@ -1,5 +1,8 @@
 2008-04-03  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c/35738
+       * gcc.dg/gomp/pr35738.c: New test.
+
        PR middle-end/35818
        * gcc.dg/gomp/pr35818.c: New test.
 
diff --git a/gcc/testsuite/gcc.dg/gomp/pr35738.c b/gcc/testsuite/gcc.dg/gomp/pr35738.c
new file mode 100644 (file)
index 0000000..0b3866e
--- /dev/null
@@ -0,0 +1,18 @@
+/* PR c/35738 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+void foo (void);
+
+void
+bar (void *p)
+{
+  int i = 0;
+  char q[10];
+#pragma omp atomic
+  i += q;              /* { dg-warning "makes integer from pointer without a cast" } */
+#pragma omp atomic
+  i += foo;            /* { dg-warning "makes integer from pointer without a cast" } */
+#pragma omp atomic
+  i += p;              /* { dg-warning "makes integer from pointer without a cast" } */
+}