aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-common.c
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@netcologne.de>2007-03-08 07:31:47 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2007-03-08 07:31:47 +0000
commit1916c916caf5b22b43ba62974586ffbd3b89b406 (patch)
tree383e9344ece683592f3f56bb28e93c5962c79459 /gcc/c-common.c
parentcc891727f0647d3123c9776250dc08edeec91e51 (diff)
downloadgcc-1916c916caf5b22b43ba62974586ffbd3b89b406.zip
gcc-1916c916caf5b22b43ba62974586ffbd3b89b406.tar.gz
gcc-1916c916caf5b22b43ba62974586ffbd3b89b406.tar.bz2
re PR c++/30852 (Trouble with __builtin_offsetof and volatile)
PR c++/30852 * c-common.c (fold_offsetof_1): Handle COMPOUND_EXPR. * semantics.c (finish_offsetof): Handle COMPOUND_EXPR. * g++.dg/ext/offsetof1.C: Add cases with volatile. From-SVN: r122686
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r--gcc/c-common.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index db64da5..0bcd462 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -6443,6 +6443,12 @@ fold_offsetof_1 (tree expr, tree stop_ref)
off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
break;
+ case COMPOUND_EXPR:
+ /* Handle static members of volatile structs. */
+ t = TREE_OPERAND (expr, 1);
+ gcc_assert (TREE_CODE (t) == VAR_DECL);
+ return fold_offsetof_1 (t, stop_ref);
+
default:
gcc_unreachable ();
}