From patchwork Sun Dec 11 22:22:55 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Fabien_Ch=C3=AAne?= X-Patchwork-Id: 130618 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id DA027B6F9B for ; Mon, 12 Dec 2011 09:23:22 +1100 (EST) Received: (qmail 6027 invoked by alias); 11 Dec 2011 22:23:09 -0000 Received: (qmail 6010 invoked by uid 22791); 11 Dec 2011 22:23:09 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL, BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-qy0-f175.google.com (HELO mail-qy0-f175.google.com) (209.85.216.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 11 Dec 2011 22:22:56 +0000 Received: by qcqw6 with SMTP id w6so3297270qcq.20 for ; Sun, 11 Dec 2011 14:22:55 -0800 (PST) MIME-Version: 1.0 Received: by 10.229.67.23 with SMTP id p23mr3960959qci.114.1323642175372; Sun, 11 Dec 2011 14:22:55 -0800 (PST) Received: by 10.229.136.194 with HTTP; Sun, 11 Dec 2011 14:22:55 -0800 (PST) Date: Sun, 11 Dec 2011 23:22:55 +0100 Message-ID: Subject: warn about deprecated access declarations From: =?ISO-8859-1?Q?Fabien_Ch=EAne?= To: gcc@gcc.gnu.org, GCC Patches Cc: Jason Merrill X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org 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);