aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimplify.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-08-07 20:34:29 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-08-07 20:34:29 +0200
commit56b5041c02bd8ecfddd5e5a373c8a3586a2354ab (patch)
treec89ce11c83972621f5a37972d6d1ac9a7b80144e /gcc/gimplify.c
parent2643d17f5a0c6b2c760e9dc9bc23399dbc6aae37 (diff)
downloadgcc-56b5041c02bd8ecfddd5e5a373c8a3586a2354ab.zip
gcc-56b5041c02bd8ecfddd5e5a373c8a3586a2354ab.tar.gz
gcc-56b5041c02bd8ecfddd5e5a373c8a3586a2354ab.tar.bz2
re PR c/69389 (bit field incompatible with OpenMP atomic update)
PR c/69389 * gimplify.c (goa_stabilize_expr): Handle BIT_INSERT_EXPR and BIT_FIELD_REF. * c-omp.c (c_finish_omp_atomic): Handle atomics on bitfields. * testsuite/libgomp.c/pr69389.c: New test. * testsuite/libgomp.c++/pr69389.C: New test. From-SVN: r250929
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r--gcc/gimplify.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 76a08c6..ed2ec64 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -10825,6 +10825,7 @@ goa_stabilize_expr (tree *expr_p, gimple_seq *pre_p, tree lhs_addr,
case TRUTH_AND_EXPR:
case TRUTH_OR_EXPR:
case TRUTH_XOR_EXPR:
+ case BIT_INSERT_EXPR:
saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 1), pre_p,
lhs_addr, lhs_var);
/* FALLTHRU */
@@ -10843,6 +10844,11 @@ goa_stabilize_expr (tree *expr_p, gimple_seq *pre_p, tree lhs_addr,
break;
}
break;
+ case tcc_reference:
+ if (TREE_CODE (expr) == BIT_FIELD_REF)
+ saw_lhs |= goa_stabilize_expr (&TREE_OPERAND (expr, 0), pre_p,
+ lhs_addr, lhs_var);
+ break;
default:
break;
}