This is the mail archive of the gcc@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: Bootstrap failure on powerpc-apple-darwin8 with Ada


> And would that be because analyze_expr isn't implemented for Ada?

That doesn't bother me so much, actually (mainly because i don't care
about Ada). It's the fact that it's popping up in C/C++ that does.


> 
> > IE if we have something very funky like:
> > 
> > static int c;
> > static int d;
> > static struct foo *a = &{&c, &d};
> > 
> > (and if you look, andrew found a case where we are producing
> > &<constructor>, so this is a possibility, AFAICT)
> 
> I disbelieve you can get this in C or C++.

That's how this whole discussion popped up originally.

Andrew discovered an equivalent C/C++ testcase that produces
&<CONSTRUCTOR>.

See PR 23171.

Since C/C++'s analyze_expr (or whatever you want to produce that code)
doesn't produce the nice code below for that testcase, we get screwed.

>   The fragment above
> is a syntax error.  AFAIK, all of this is simple laziness in the
> Ada front end: generating &<constructor> is how things were done
> at the beginning of time, and it was easier to change this in the
> gimplifier than to modify the code that generated this directly.
> 
> > In the above case, we need to see the &c, &d part.
> > How does analyze_expr help us here?
> 
> By transforming to
> 
>   static struct foo tmp = { &c, &d };
>   static struct foo* a = &tmp;


By "gimplify static initializers", i actually meant produce the code
you've listed from whatever was generating &<constructor>.  Nothing
more. 

If analyze_expr (or something) actually did that, i'd be a very happy
man.
It doesn't, unfortunately.
Another perfectly reasonable solution would be to force us to not
generate such crap in the first place.



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