diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-12-06 22:06:43 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-12-06 22:06:43 +0100 |
commit | f11bea25dd16c9408329efdc83379b44fc644441 (patch) | |
tree | b30ae3524fb44587f4f26684405b0d23a71969fb | |
parent | 8b86bdbc02cddb4d8948380d46add28ea979f289 (diff) | |
download | gcc-f11bea25dd16c9408329efdc83379b44fc644441.zip gcc-f11bea25dd16c9408329efdc83379b44fc644441.tar.gz gcc-f11bea25dd16c9408329efdc83379b44fc644441.tar.bz2 |
re PR middle-end/38428 (ice for Linux kernel code with -O2)
PR middle-end/38428
* tree-ssa-operands.c (get_expr_operands) <case BIT_FIELD_REF>: Set
gimple_set_has_volatile_ops if the BIT_FIELD_REF is volatile.
* gcc.c-torture/compile/pr38428.c: New test.
From-SVN: r142527
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr38428.c | 20 | ||||
-rw-r--r-- | gcc/tree-ssa-operands.c | 4 |
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 984e8ba..2f6ea17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-12-06 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/38428 + * tree-ssa-operands.c (get_expr_operands) <case BIT_FIELD_REF>: Set + gimple_set_has_volatile_ops if the BIT_FIELD_REF is volatile. + 2008-12-07 Ben Elliston <bje@au.ibm.com> * gthr-single.h (__gthread_once): Adjust prototype to match all diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bf19792..2e6c2da 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2008-12-06 Jakub Jelinek <jakub@redhat.com> + PR middle-end/38428 + * gcc.c-torture/compile/pr38428.c: New test. + PR middle-end/38422 * gcc.c-torture/execute/pr38422.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr38428.c b/gcc/testsuite/gcc.c-torture/compile/pr38428.c new file mode 100644 index 0000000..aa32fc1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr38428.c @@ -0,0 +1,20 @@ +/* PR middle-end/38428 */ + +struct S +{ + volatile struct + { + unsigned int t : 1; + } s; +}; + +int +foo (struct S *x) +{ + int ret; + if (x->s.t) + ret = 0; + else + ret = 10; + return ret; +} diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 9624188..85a0a08 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -2010,6 +2010,10 @@ get_expr_operands (gimple stmt, tree *expr_p, int flags) } case BIT_FIELD_REF: + if (TREE_THIS_VOLATILE (expr)) + gimple_set_has_volatile_ops (stmt, true); + /* FALLTHRU */ + case TRUTH_NOT_EXPR: case VIEW_CONVERT_EXPR: do_unary: |