C/C++ PATCH to implement -Wpointer-compare warning (PR c++/64767)

Martin Sebor msebor@gmail.com
Fri Sep 30 22:16:00 GMT 2016


On 09/30/2016 01:40 PM, Marek Polacek wrote:
> On Fri, Sep 30, 2016 at 01:08:19PM -0600, Martin Sebor wrote:
>> On 09/30/2016 11:05 AM, Martin Sebor wrote:
>>>> +        permerror (input_location, "ISO C++11 only allows pointer "
>>>> +               "conversions for integer literals");
>>>
>>> FWIW, I think it would be clearer to either mention the currently
>>> selected language version or leave it out completely rather than
>>> hardcoding C++11.  When the user specifies -std=c++14 (or later),
>>> or when that's the current version used by the compiler, a warning
>>> that tells them what C++ 11 allows isn't really relevant (or
>>> meaningful), and becomes less so as time goes on.
>>
>> Btw., I realize there are other instances where the C++ version
>> has been hardcoded and so I should have made it clear that I meant
>> my comment as a general suggestion, not as an objection to the patch.
>> Sorry if that wasn't apparent.
>>
>> I've quickly surveyed some of the existing messages that mention
>> a C++ version and found instances where it applies only to the
>> referenced version of the standard and prior but not later versions. For
>> example:
>>
>>   msgid "in C++98 %q+D may not be static because it is a member of a union"
>>   msgid "in C++03 a class-key must be used when declaring a friend"
>>
>> But I also came across another form that may resolve the concern
>> I raised: mentioning the version along with whether it's the first
>> or last that supports (or doesn't support) the construct, such as
>> "C++11 and above."  Here's one example of it:
>>
>>   msgid "in C++11 and above a default constructor can be explicit"
>>
>> It might be worth to come up with a convention to adopt in new
>> messages and (gradually) change what's already there to use it.
>
> Maybe, no strong opinions, I'll just go with whatever people prefer here.
> Though I guess I like those explicit versions because you know when a
> particular thing changed.  And when you're using -std=c++14 and the
> compiler says C++11, I think that's ok, because C++14 implies C++11.

I agree that mentioning the (first or last) version can be helpful.
Does adopting the "C++11 and later" and "C++11 and earlier" phrasing
sound good then?  If no one objects I'll add it to the Guidelines for
C/C++ FE diagnostics on the Wiki.

(I changed "above" to "later" because it pairs better with "earlier"
than "below" would , and because it seems to be more natural when
referring to the year the version a standard was ratified.)

Martin



More information about the Gcc-patches mailing list