public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Paolo Carlini <paolo.carlini@oracle.com>
To: Jason Merrill <jason@redhat.com>,
	       "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: Re: [C++ RFC/Patch] PR 34938
Date: Fri, 22 Aug 2014 19:19:00 -0000	[thread overview]
Message-ID: <53F797AD.5070309@oracle.com> (raw)
In-Reply-To: <53F7894C.8010803@redhat.com>

Hi,

On 08/22/2014 08:17 PM, Jason Merrill wrote:
> On 08/22/2014 01:53 PM, Paolo Carlini wrote:
>> maybe this old issue is already fixed. We used to ICE on:
>>
>> typedef void (*fptr)() __attribute((noreturn));
>> template<int> void foo();
>> template<fptr> void bar();
>>
>> fptr f = bar< foo<0> >;
>>
>> but lately we simply reject it:
>>
>> 34938.C:5:10: error: no matches converting function ‘bar’ to type ‘fptr
>> {aka void (*)() volatile}’
>> fptr f = bar< foo<0> >;
>> ^
>> 34938.C:3:21: note: candidate is: template<void (* <anonymous>)()
>> volatile> void bar()
>> template<fptr> void bar();
>> ^
>>
>> is that Ok? clang behaves like us, EDG accepts the code.
>
> Well, since the attribute is outside the language, I guess we get to 
> decide what it means; C++11 [[noreturn]] is only defined on decls, not 
> types.
>
> I think rejecting it makes sense; since bar is not declared as 
> noreturn, assigning its address to a noreturn function pointer seems 
> wrong.
Ok, thanks. Good.
>> A secondary
>> issue I noticed is that we print 'volatile' instead of the attribute,
>> that is fixed by the patchlet below.
>
> Currently function-cv-quals on a FUNCTION_TYPE used as a typedef or 
> template parameter have the same encoding as the const and noreturn 
> attributes;
Indeed, this is also my understanding per pp_c_cv_qualifiers.
> to get the printing right you need to know the context of the 
> FUNCTION_TYPE.  If it's the type of a pointer, then the attribute is 
> correct.
Ok. Currently in cases like the present one, dump_type_suffix upon a 
pointer recurses and we end up calling pp_cxx_cv_qualifiers on the given 
FUNCTION_TYPE / METHOD_TYPE. Thus pp_cxx_cv_qualifiers lacks the pointer 
context, just sees the latter. Do you think that the current simple 
setup, thus my patch which just extends it, can be incorrect in some cases?

Thanks,
Paolo.

  reply	other threads:[~2014-08-22 19:19 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-22 17:53 Paolo Carlini
2014-08-22 18:17 ` Jason Merrill
2014-08-22 19:19   ` Paolo Carlini [this message]
2014-08-22 19:27     ` Jason Merrill
2014-08-22 19:33       ` Paolo Carlini
2014-08-22 19:48         ` Manuel López-Ibáñez
2014-08-22 19:56           ` Jason Merrill
2014-08-22 20:35         ` Paolo Carlini
2014-08-22 20:45           ` Jason Merrill
2014-08-22 21:16             ` Paolo Carlini
2014-08-23  7:16               ` Paolo Carlini
2014-08-23 15:03                 ` Paolo Carlini
2014-08-25  2:53                   ` Jason Merrill

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53F797AD.5070309@oracle.com \
    --to=paolo.carlini@oracle.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jason@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).