On Sep 25, 2014, at 7:38 PM, Richard Smith <[email protected]> wrote:
> Hi!
>
> Per C++ [dcl.fct.def.general]p8, __func__ acts as if it were defined as a
> static local variable defined within the surrounding function. This has two
> impacts on the ABI which we don't seem to capture today, and for which
> implementations vary. Consider:
> inline const char *f() { return __func__; }
> To my reading, the standard requires f() to return the same pointer in every
> translation unit. But... what is the mangled name of that string literal, and
> what does it contain? (We must produce the same contents in every TU in order
> to give it the same type.)
>
> Implementations vary only slightly on the first question. GCC mangles it as
> _ZZ1fvE8__func__ but makes the symbol internal. EDG and Clang make it
> internal with no particular symbol. None of these approaches is conforming.
> We could perhaps call this a standard defect: perhaps the address of the
> object named by __func__ should be permitted to differ on each evaluation.
>
> Implementations vary much more significantly on the second question, giving
> different values (and thus different types) for __func__ in the same inline
> function. Is there anything we can do to make this work? I don't see any good
> options here, but I wanted to check with this group before suggesting the
> standard be changed (for instance, by making __func__ a prvalue of type
> 'const char*' rather than an lvalue of type 'const char[N]').
>
> Thoughts?
I like you example standard change.
Daveed
_______________________________________________
cxx-abi-dev mailing list
[email protected]
http://sourcerytools.com/cgi-bin/mailman/listinfo/cxx-abi-dev