Re: warn about deprecated access declarations

2011-12-13 Thread Fabien Chêne
2011/12/13 Miles Bader :
> Jonathan Wakely  writes:
> How about "...; suggest adding the using keyword"?

 That sounds like the compiler is suggesting that the user suggests
 doing that!
>>>
>>> It is similar to "suggest parentheses ...".
>>
>> Good point, that's not correct English either, but it would be consistent.
>>
>> ("Suggest X" is an imperative, telling the user to suggest X.  The
>> intention is for the compiler to suggest it, not tell the user to
>> suggest it, so the correct grammar would be "GCC suggests X".)
>
> How about "; suggestion: use parentheses" or "; suggestion: add the
> `using' keyword" (using whatever convention for quoting code).

Sounds good. Since nobody has objected yet, I am going to prepare the
complete patch, to submit it probably at the end of the week.

-- 
Fabien


Re: warn about deprecated access declarations

2011-12-12 Thread Miles Bader
Jonathan Wakely  writes:
 How about "...; suggest adding the using keyword"?
>>>
>>> That sounds like the compiler is suggesting that the user suggests
>>> doing that!
>>
>> It is similar to "suggest parentheses ...".
>
> Good point, that's not correct English either, but it would be consistent.
>
> ("Suggest X" is an imperative, telling the user to suggest X.  The
> intention is for the compiler to suggest it, not tell the user to
> suggest it, so the correct grammar would be "GCC suggests X".)

How about "; suggestion: use parentheses" or "; suggestion: add the
`using' keyword" (using whatever convention for quoting code).

-miles

-- 
Do not taunt Happy Fun Ball.



Re: warn about deprecated access declarations

2011-12-12 Thread Jonathan Wakely
On 12 December 2011 10:08, Andreas Schwab wrote:
> Jonathan Wakely  writes:
>
>> On 12 December 2011 09:18, Andreas Schwab wrote:
>>> Jonathan Wakely  writes:
>>>
 On 11 December 2011 22:22, Fabien Chêne wrote:
>
> Consequently, I propose to deprecate them with a warning, as clang 
> already does.
> So that you get a warning for the following code:
>
> struct A { int i; };
> struct B : A
> {
>  A::i; // <- warning here
> };
>
> warning: access declarations are deprecated; employ using declarations
> instead [-Wdeprecated]

 Whether or not it's suitable for stage 3, "employ" feels a bit clunky
 in this context, how about "access declarations are deprecated in
 favour of using-declarations" ?
>>>
>>> How about "...; suggest adding the using keyword"?
>>
>> That sounds like the compiler is suggesting that the user suggests doing 
>> that!
>
> It is similar to "suggest parentheses ...".

Good point, that's not correct English either, but it would be consistent.

("Suggest X" is an imperative, telling the user to suggest X.  The
intention is for the compiler to suggest it, not tell the user to
suggest it, so the correct grammar would be "GCC suggests X".)


Re: warn about deprecated access declarations

2011-12-12 Thread Andreas Schwab
Jonathan Wakely  writes:

> On 12 December 2011 09:18, Andreas Schwab wrote:
>> Jonathan Wakely  writes:
>>
>>> On 11 December 2011 22:22, Fabien Chêne wrote:

 Consequently, I propose to deprecate them with a warning, as clang already 
 does.
 So that you get a warning for the following code:

 struct A { int i; };
 struct B : A
 {
  A::i; // <- warning here
 };

 warning: access declarations are deprecated; employ using declarations
 instead [-Wdeprecated]
>>>
>>> Whether or not it's suitable for stage 3, "employ" feels a bit clunky
>>> in this context, how about "access declarations are deprecated in
>>> favour of using-declarations" ?
>>
>> How about "...; suggest adding the using keyword"?
>
> That sounds like the compiler is suggesting that the user suggests doing that!

It is similar to "suggest parentheses ...".

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Re: warn about deprecated access declarations

2011-12-12 Thread Jonathan Wakely
On 12 December 2011 09:18, Andreas Schwab wrote:
> Jonathan Wakely  writes:
>
>> On 11 December 2011 22:22, Fabien Chêne wrote:
>>>
>>> Consequently, I propose to deprecate them with a warning, as clang already 
>>> does.
>>> So that you get a warning for the following code:
>>>
>>> struct A { int i; };
>>> struct B : A
>>> {
>>>  A::i; // <- warning here
>>> };
>>>
>>> warning: access declarations are deprecated; employ using declarations
>>> instead [-Wdeprecated]
>>
>> Whether or not it's suitable for stage 3, "employ" feels a bit clunky
>> in this context, how about "access declarations are deprecated in
>> favour of using-declarations" ?
>
> How about "...; suggest adding the using keyword"?

That sounds like the compiler is suggesting that the user suggests doing that!

> "using declarations" is ambigous, it is not clear that "using" means the
> keyword here.

That's why I put the hyphen in "using-declarations" :-) but this is
turning into a bike shed issue.


Re: warn about deprecated access declarations

2011-12-12 Thread Andreas Schwab
Jonathan Wakely  writes:

> On 11 December 2011 22:22, Fabien Chêne wrote:
>>
>> Consequently, I propose to deprecate them with a warning, as clang already 
>> does.
>> So that you get a warning for the following code:
>>
>> struct A { int i; };
>> struct B : A
>> {
>>  A::i; // <- warning here
>> };
>>
>> warning: access declarations are deprecated; employ using declarations
>> instead [-Wdeprecated]
>
> Whether or not it's suitable for stage 3, "employ" feels a bit clunky
> in this context, how about "access declarations are deprecated in
> favour of using-declarations" ?

How about "...; suggest adding the using keyword"?

"using declarations" is ambigous, it is not clear that "using" means the
keyword here.

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Re: warn about deprecated access declarations

2011-12-11 Thread Fabien Chêne
2011/12/11 Jonathan Wakely :
> On 11 December 2011 22:22, Fabien Chêne wrote:
>>
>> Consequently, I propose to deprecate them with a warning, as clang already 
>> does.
>> So that you get a warning for the following code:
>>
>> struct A { int i; };
>> struct B : A
>> {
>>  A::i; // <- warning here
>> };
>>
>> warning: access declarations are deprecated; employ using declarations
>> instead [-Wdeprecated]
>
> Whether or not it's suitable for stage 3, "employ" feels a bit clunky
> in this context, how about "access declarations are deprecated in
> favour of using-declarations" ?

Native spoker's suggestions are always very welcome, thanks !
(I was just trying to avoid using "use" ...)

-- 
Fabien


Re: warn about deprecated access declarations

2011-12-11 Thread Jonathan Wakely
On 11 December 2011 22:22, Fabien Chêne wrote:
>
> Consequently, I propose to deprecate them with a warning, as clang already 
> does.
> So that you get a warning for the following code:
>
> struct A { int i; };
> struct B : A
> {
>  A::i; // <- warning here
> };
>
> warning: access declarations are deprecated; employ using declarations
> instead [-Wdeprecated]

Whether or not it's suitable for stage 3, "employ" feels a bit clunky
in this context, how about "access declarations are deprecated in
favour of using-declarations" ?


warn about deprecated access declarations

2011-12-11 Thread Fabien Chêne
Hi,

According to § 11.3/1 from c++98, access delarations are deprecated:

The access of a member of a base class can be changed in the derived
class by mentioning its qualified-id in the derived class declaration.
Such mention is called an access declaration. The effect of an access
declaration qualified-id; is defined to be equivalent to the
declaration usingqualified-id; [Footnote: Access declarations are
deprecated; member using-declarations (7.3.3) provide a better means
of doing the same things. In earlier versions of the C++ language,
access declarations were more limited; they were generalized and made
equivalent to using-declarations - end footnote]

Consequently, I propose to deprecate them with a warning, as clang already does.
So that you get a warning for the following code:

struct A { int i; };
struct B : A
{
  A::i; // <- warning here
};

warning: access declarations are deprecated; employ using declarations
instead [-Wdeprecated]

The warning is trivial to avoid, just add the keyword 'using' before
the access declaration.
Before adjusting the whole testsuite, I would like to know if there is
agreement to do it at stage 3.
The patch is really simple: (it does not include yet testsuite adjustements)

Index: gcc/cp/parser.c
===
--- gcc/cp/parser.c (revision 182209)
+++ gcc/cp/parser.c (working copy)
@@ -18900,7 +18900,11 @@ cp_parser_member_declaration (cp_parser*
   parser->colon_corrects_to_scope_p = false;

   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
-goto out;
+{
+  warning (OPT_Wdeprecated, "access declarations are deprecated; "
+  "employ using declarations instead");
+  goto out;
+}

   /* Parse the decl-specifier-seq.  */
   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);

-- 
Fabien