diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-08-07 20:34:29 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-08-07 20:34:29 +0200 |
commit | 56b5041c02bd8ecfddd5e5a373c8a3586a2354ab (patch) | |
tree | c89ce11c83972621f5a37972d6d1ac9a7b80144e /gcc/gimplify.c | |
parent | 2643d17f5a0c6b2c760e9dc9bc23399dbc6aae37 (diff) | |
download | gcc-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.c | 6 |
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; } |