From 5e55f99dcfd04fddf2b8dc9d99c7202417a7a89c Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 11 Sep 2004 10:02:58 -0700 Subject: [PATCH] re PR c/17396 (ICE in tree-int-cst at -O0) PR c/17396 * c-typeck.c (build_unary_op): Add legacy offsetof hack. From-SVN: r87351 --- gcc/ChangeLog | 5 +++++ gcc/c-typeck.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 48e06ce9e60..2e4b04a750e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-09-11 Richard Henderson + + PR c/17396 + * c-typeck.c (build_unary_op): Add legacy offsetof hack. + 2004-09-11 Kazu Hirata * doc/cfg.texi, doc/hostconfig.texi, doc/install.texi, diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index b06085d8c2c..85ba9ce58e2 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -2619,6 +2619,14 @@ build_unary_op (enum tree_code code, tree xarg, int flag) } argtype = build_pointer_type (argtype); + + /* ??? Cope with user tricks that amount to offsetof. Delete this + when we have proper support for integer constant expressions. */ + val = get_base_address (arg); + if (val && TREE_CODE (val) == INDIRECT_REF + && integer_zerop (TREE_OPERAND (val, 0))) + return fold_convert (argtype, fold_offsetof (arg)); + val = build1 (ADDR_EXPR, argtype, arg); if (TREE_CODE (arg) == COMPOUND_LITERAL_EXPR) -- 2.30.2