This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [4.5 regression] C++ ignores some aligned attributes (Re: [PATCH] fix arm neon ICE by widening tree_type's precision field)


On Wed, Jul 28, 2010 at 8:36 PM, Ulrich Weigand <uweigand@de.ibm.com> wrote:
> Nathan Froyd wrote:
>
>> 2009-06-09 ?Nathan Froyd ?<froydnj@codesourcery.com>
>>
>> ? ? ? * tree.h (tree_base): Add packed_flag and user_align fields.
>> ? ? ? Decrease size of spare field.
>> ? ? ? (TYPE_USER_ALIGN): Use user_align from tree_base.
>> ? ? ? (DECL_USER_ALIGN): Likewise.
>
> It seems this broke attribute ((aligned)) handling for certain
> cases in C++, which causes crashes in the Mozilla JavaScript
> interpreter under some circumstances.
>
> I've opened PR c++/45112 for this problem. ?The bug occurs with
> code like the following:
>
> struct JSString
> {
> ?unsigned char mLength;
> ?static JSString unitStringTable[];
> };
>
> JSString JSString::unitStringTable[] __attribute__ ((aligned (8))) = { 1 };
>
> (extracted and simplified from Mozilla), where the aligned attribute
> seems to be simply ignored from 4.5 on.
>
> The C++ front-end sees two DECLs here, one for the declaration (with
> DECL_USER_ALIGN cleared) and one for the definition (with DECL_USER_ALIGN
> set). ?These are supposed to be merged by cp-decl.c:duplicate_decls.
>
> Before this patch, this would happen inside the following memcpy:
>
> ? ? ?memcpy ((char *) olddecl + sizeof (struct tree_common),
> ? ? ? ? ? ? ?(char *) newdecl + sizeof (struct tree_common),
> ? ? ? ? ? ? ?sizeof (struct tree_decl_common) - sizeof (struct tree_common));
>
> which copied everything in tree_decl_common, *except* what is
> in tree_common.

Ick - that looks extremely fragile.  Can we make it less so?

Richard.

> Now, the patch unfortunately moves the user_align (and packed_flag)
> fields out of the area copied by this memcpy, and into tree_common.
>
> It seems this means it now ought to be handled manually, but this
> code is missing ...
>
> I'll try to come up with a fix. ?Any thoughts from C++ folks?
>
> Bye,
> Ulrich
>
> --
> ?Dr. Ulrich Weigand
> ?GNU Toolchain for Linux on System z and Cell BE
> ?Ulrich.Weigand@de.ibm.com
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]