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.
But GNAT doesn't rely on GCC for constant folding static expressions, or even call the back end before semantic analysis has finished! This is what we're talking about.
-Geert