As several front-end people have suggested, calling fold whilst
constructing parse trees shouldn't be necessary (as shown by the
shining examples of g77 and GNAT).
I don't follow. GNAT certainly calls fold for every expression it makes.
In reality, many of the transformations performed by fold (most? as I
expect expressions with constant operands are actually fairly rare at
the source level) are purely to tidy up the inefficiencies or
incorrect tree representations constructed by the front-ends.
I disagree. It's far better to have common code to do simplifications
than to have each front end have their own set. I'm not sure I understand
your point here.