Every front end should have it's own representation, which should be
lowered to something common like GIMPLE that is simple, well-
documented, and yet expressive enough to be useful to everyone. I
feel we can't make real progress any other way. Imagine how
maintainable each front-end having its own high-level IR with real
distinct C structs and unions would be.
Well... When I tried to imagine, I started thinking "and, yes, we
could have completely different representations for exceptions and
structures and references and function calls between the C, C++, Ada,
and Java frontends" which didn't sound quite so great.
After all, another project which is also a good idea
and not making much progress recently is to commonize
more of the C and C++ frontends.
Maybe a better solution would be to document what the
tree structure is actually supposed to look like,
and then try to ensure that?