On 04/25/2017 01:58 PM, Jakub Jelinek wrote:
> On Tue, Apr 25, 2017 at 01:48:05PM +0200, Martin Liška wrote:
>> Hello.
>>
>> This is patch that was originally installed by Jason and later reverted due 
>> to PR70422.
>> In the later PR Richi suggested a fix for that and Segher verified that it 
>> helped him
>> to survive regression tests. That's reason why I'm resending that.
>>
>> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.
>>
>> Ready to be installed?
>> Martin
> 
>> >From a34ce0ef37ae00609c9f3ff98a9cb0b7db6a8bd0 Mon Sep 17 00:00:00 2001
>> From: marxin <mli...@suse.cz>
>> Date: Thu, 20 Apr 2017 14:56:30 +0200
>> Subject: [PATCH] Make __FUNCTION__ a mergeable string and do not generate
>>  symbol entry.
>>
>> gcc/cp/ChangeLog:
>>
>> 2017-04-20  Jason Merrill  <ja...@redhat.com>
>>          Martin Liska  <mli...@suse.cz>
>>          Segher Boessenkool  <seg...@kernel.crashing.org>
>>
>>      PR c++/64266
>>      PR c++/70353
>>      PR bootstrap/70422
>>      Core issue 1962
>>      * decl.c (cp_fname_init): Decay the initializer to pointer.
>>      (cp_make_fname_decl): Set DECL_DECLARED_CONSTEXPR_P,
>>      * pt.c (tsubst_expr) [DECL_EXPR]: Set DECL_VALUE_EXPR,
>>      DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P and
>>      DECL_IGNORED_P.  Don't call cp_finish_decl.
> 
> If we don't emit those into the debug info, will the debugger be
> able to handle __FUNCTION__ etc. properly?

No, debugger with the patch can't handled these. Similar to how clang
behaves currently. Maybe it can be conditionally enabled with -g3, or -g?

> Admittedly, right now we emit it into debug info only if those decls
> are actually used, say on:
> const char * foo () { return __FUNCTION__; }
> const char * bar () { return ""; }
> we'd emit foo::__FUNCTION__, but not bar::__FUNCTION__, so the debugger
> has to have some handling of it anyway.  But while in functions
> that don't refer to __FUNCTION__ it is always the debugger that needs
> to synthetize those and thus they will be always pointer-equal,
> if there are some uses of it and for other uses the debugger would
> synthetize it, there is the possibility that the debugger synthetized
> string will not be the same object as actually used in the function.

You're right, currently one has to use a special function to be able to
print it in debugger. I believe we've already discussed that, according
to spec, the strings don't have to point to a same string.

Suggestions what we should do with the patch?
Thanks,
Martin

> 
>       Jakub
> 

Reply via email to