aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-04-03 23:03:54 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2008-04-03 23:03:54 +0200
commit79addd1f3581896333c5437c10ae7a5202acc2ae (patch)
tree51e7c729870e7c06702c9a2e8c4544dad0371716 /gcc
parent5da250fca2d707547044284a84e94beb0c74bb5a (diff)
downloadgcc-79addd1f3581896333c5437c10ae7a5202acc2ae.zip
gcc-79addd1f3581896333c5437c10ae7a5202acc2ae.tar.gz
gcc-79addd1f3581896333c5437c10ae7a5202acc2ae.tar.bz2
re PR c/35738 (ICE with #pragma omp atomic and conversion from pointer to int)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/c-parser.c5
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/gomp/pr35738.c18
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 29a3cce..a9aad32 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/c-parser.c b/gcc/c-parser.c
index d638a0b..09b6359 100644
--- a/gcc/c-parser.c
+++ b/gcc/c-parser.c
@@ -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);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1bad997..c89aa30 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..0b3866e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gomp/pr35738.c
@@ -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" } */
+}