This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [c++] don't expand &a.b to pointer arithmetic
- From: "Giovanni Bajo" <rasky at develer dot com>
- To: "Andreas Schwab" <schwab at suse dot de>
- Cc: "Richard Henderson" <rth at redhat dot com>,<gcc-patches at gcc dot gnu dot org>
- Date: Tue, 31 Aug 2004 18:03:46 +0200
- Subject: Re: [c++] don't expand &a.b to pointer arithmetic
- References: <20040830190717.GA2208@redhat.com> <je4qmjxrwj.fsf@sykes.suse.de>
Andreas Schwab wrote:
>> * class.c (build_base_path): Use build_address directly.
>> * typeck.c (build_unary_op): Don't lower &a.b to pointer
>> arithmetic directly.
>> * typeck2.c (store_init_value): Don't assume !TREE_CONSTANT
>> means !initializer_constant_valid_p.
>
> This causes this expression
>
> # define _SC_GR0_OFFSET \
> (((char *) &((struct sigcontext *) 0)->sc_gr[0]) - (char *) 0)
>
> to no longer being an integral constant expression, which breaks building
> the java library on ia64-linux.
Correct, that is *not* an integral constant expression in C++. Try with:
#define _SC_GR0_OFFSET __builtin_offsetof(struct sigcontext, sc_gr[0])
Giovanni Bajo