On Wed, 15 Aug 2012, Gabriel Dos Reis wrote: > On Wed, Aug 15, 2012 at 5:11 AM, Florian Weimer <fwei...@redhat.com> wrote: > > On 08/15/2012 12:07 PM, Gabriel Dos Reis wrote: > > > >> You might try to encode/package information with the > >> parameters T and A, but essentially you will hit the wall > >> that __FILE__, __LINE__, and __FUNCTION__ are CPP artifacts. > > > > > > GNAT has built-in functions which return this information. > > This is a very sensible thing to do. > > > When they are > > used in default argument expressions and these arguments are omitted, the > > functions are evaluated in the context of the caller and return the file > > position at that point. Perhaps that would be an approach for C++ as well? > > C++ already has the rule that default arguments are evaluated at the call > site, so this is definitely something to consider for stage 2 and higher > builds. > For stage 1 builds, I suppose one would have to fake it and leave > with the imprecision that is bothering Richard? > > > (This assumes that gather-detailed-mem-stats is not needed in the first > > stage compiler.) > > it is built into stage 1 compiler, but I doubt that stage 1 compiler is > really useful to the kind of detailed statistics that would require this.
The configury for --enable-gather-detailed-mem-stats is re-done for each stage, so if we add a proper feature check we can simply disable it in stage1 when the host compiler does not support this feature. We can add __builtin__FILE__ and friends in generic code, for example "folding" them during gimplification using location information on the CALL_EXPR and the current function context. I think at least __FUNCTION__ is already sort-of a "builtin" as the preprocessor has no way of expanding it. Richard.