[PATCH] Fix type correctness of fold_indirect_ref
Mark Mitchell
mark@codesourcery.com
Tue May 17 00:16:00 GMT 2005
Steven Bosscher wrote:
>>That's orthogonal. There's no reason you can't write a great front end
>>using trees.
>
>
> But it is hard to write a great back end using trees when at least one
> front end has its own set of rules about using trees.
No, that's not true either. It's hard to write a great back end when
you try to interleave the front end and the back end. If the front end
works for a while, stops, and hands some well-defined data structures to
the back end in the format the back end wants, there's no problem.
> G++ abuses trees in horrible ways by linking together trees of different
> kinds (e.g. TREE_LISTs, *_DECLs, and OVERLOADs) and also by overloading
> many tree fields (e.g. TREE_TYPE). This makes cleaning up some fields
> in the existing tree structures a tough job.
I agree. Many of these things should not be trees at all, and others
are indeed abused in odd ways. CodeSourcery has been pitching projects
involving improving the G++ data structures at people for years.
Overall, we (not just CodeSourcery, the whole community) have had some
mild succsess in cleaning things up, though there's definitely more to do.
> G++ also needs to define a lot of language-specific tree nodes because
> it wants a representation that is close to the source code.
I think that's a bit of a stretch. In theory, we could always have just
one tree code for CXX_TREE and then some other discriminator. The truth
is that if we made the things that need not be trees not be trees, there
wouldn't be very many C++-specific tree codes.
There are actually notable advantages of using the same representation
in the front-end and middle-end in that we are able to reuse data
structure -- and even some code -- between the layers. The problem is
that we aren't clear about which layer is which, and what the rules are.
--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304
More information about the Gcc-patches
mailing list