public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/10776: [3.3 regression] Large aggregate initializers   cause GCC to fail
@ 2003-05-14 22:06 Dara Hazeghi
  0 siblings, 0 replies; 3+ messages in thread
From: Dara Hazeghi @ 2003-05-14 22:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/10776; it has been noted by GNATS.

From: Dara Hazeghi <dhazeghi@yahoo.com>
To: Pete Gonzalez <gonz@ratloop.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/10776: [3.3 regression] Large aggregate initializers   cause GCC to fail
Date: Wed, 14 May 2003 15:01:45 -0700 (PDT)

 --- Pete Gonzalez <gonz@ratloop.com> wrote:
 > At 01:28 PM 5/14/2003, Dara Hazeghi wrote:
 > >Well thank you for the report, and the analysis.
 > I'm
 > >not certain how likely this is to get fixed in
 > 3.3.X,
 > >but it certainly doesn't hurt to have the report.
 > 
 > We've worked around it.  The larger cause is that,
 > in an aggregate
 > initializer, referencing an external pointer causes
 > a
 > "__static_initialization_and_destruction" function
 > to be generated.
 > GCC implements this with a bunch of assignment
 > instructions, and
 > with 2,500 entries in the array, I guess it
 > translates into more
 > code than the optimizer can handle.  The general
 > solution would be
 > to replace this with a memcpy() -- maybe that's what
 > 3.4 does?
 > For my specific problem, I redesigned the data types
 > so that the
 > initialization function is not created, which is
 > much more efficient
 > in both speed and size.
 > 
 > In this light, the bug becomes obscure and can
 > probably be closed.
 > My suggestion is to add some documentation
 > explaining the rules
 > behind the compiler's decision to create
 > initialization functions.
 > This is particularly important for embedded systems,
 > where the
 > initializers cause const data to end up in RAM.
 
 Well, as long as the bug is present on an active
 branch, I think we should keep it open. But it would
 definitely be good to document this behavior
 somewhere... Perhaps in a comment in the functions in
 the compiler which do this...
 
 Dara
 
 __________________________________
 Do you Yahoo!?
 The New Yahoo! Search - Faster. Easier. Bingo.
 http://search.yahoo.com


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: c++/10776: [3.3 regression] Large aggregate initializers  cause GCC to fail
@ 2003-05-14 21:36 Pete Gonzalez
  0 siblings, 0 replies; 3+ messages in thread
From: Pete Gonzalez @ 2003-05-14 21:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/10776; it has been noted by GNATS.

From: Pete Gonzalez <gonz@ratloop.com>
To: Dara Hazeghi <dhazeghi@yahoo.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/10776: [3.3 regression] Large aggregate initializers 
  cause GCC to fail
Date: Wed, 14 May 2003 17:35:29 -0400

 At 01:28 PM 5/14/2003, Dara Hazeghi wrote:
 >Well thank you for the report, and the analysis. I'm
 >not certain how likely this is to get fixed in 3.3.X,
 >but it certainly doesn't hurt to have the report.
 
 We've worked around it.  The larger cause is that, in an aggregate
 initializer, referencing an external pointer causes a
 "__static_initialization_and_destruction" function to be generated.
 GCC implements this with a bunch of assignment instructions, and
 with 2,500 entries in the array, I guess it translates into more
 code than the optimizer can handle.  The general solution would be
 to replace this with a memcpy() -- maybe that's what 3.4 does?
 For my specific problem, I redesigned the data types so that the
 initialization function is not created, which is much more efficient
 in both speed and size.
 
 In this light, the bug becomes obscure and can probably be closed.
 My suggestion is to add some documentation explaining the rules
 behind the compiler's decision to create initialization functions.
 This is particularly important for embedded systems, where the
 initializers cause const data to end up in RAM.
 
 Thanks again for your help,
 -Pete
 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: c++/10776: [3.3 regression] Large aggregate initializers cause GCC to fail
@ 2003-05-14 14:46 Pete Gonzalez
  0 siblings, 0 replies; 3+ messages in thread
From: Pete Gonzalez @ 2003-05-14 14:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/10776; it has been noted by GNATS.

From: Pete Gonzalez <gonz@ratloop.com>
To: gcc-prs@gcc.gnu.org,gcc-bugs@gcc.gnu.org,gcc-gnats@gcc.gnu.org,
 Dara Hazeghi <dhazeghi@yahoo.com>
Cc:  
Subject: Re: c++/10776: [3.3 regression] Large aggregate initializers
  cause GCC to fail
Date: Wed, 14 May 2003 10:40:59 -0400

 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10776 
 
 
 The problem seems to be the "&data::tex::tackytexture" expression
 inside the array, i.e. if I replace all instances with "0", the
 code compiles successfully:
 
 >static const TOutdoorMapData::TTriangleItem data_triangleItems[2382] = {
 >   {
 >     0, // &data::tex::tackytexture,
 >     0,
 >     { { 87, 104, 0, -778 },
 >       { 95, 106, 21, -799 },
 >       { 89, 109, 0, -799 } }
 >   },
 
 However, this crashes:
 
 >const TBitmap *nullBmp = 0;
 >
 >static const TOutdoorMapData::TTriangleItem data_triangleItems[2382] = {
 >   {
 >     nullBmp,
 >     0,
 >     { { 87, 104, 0, -778 },
 >       { 95, 106, 21, -799 },
 >       { 89, 109, 0, -799 } }
 >   },
 
 I'll let you know if I find anything else.  Thanks for the quick response.
 
 -Pete
 


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-05-14 22:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-14 22:06 c++/10776: [3.3 regression] Large aggregate initializers cause GCC to fail Dara Hazeghi
  -- strict thread matches above, loose matches on Subject: below --
2003-05-14 21:36 Pete Gonzalez
2003-05-14 14:46 Pete Gonzalez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).