From patchwork Thu Oct 25 02:47:49 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 194016 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 6B0662C0089 for ; Thu, 25 Oct 2012 13:48:04 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1351738085; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Received:Received:Message-ID:Date:From:User-Agent:MIME-Version: To:CC:Subject:References:In-Reply-To:Content-Type:Mailing-List: Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:Sender:Delivered-To; bh=E/0dRai/LSyh75kElRFtRYJm/TQ=; b=MmwHrmXPUX1p1upnG5jP0ySJjpUW2cKBkb/IQ8pyEa/siHdeHZxGzLO6Jeuzbm 8aeaTh75eTQEnWSXI23ETE7r36Fvd+D/er+rQERXhFk7joucIiYdJSGCHV91sG+z SLt7qJlC87kBzqxzT5+g6jPD4ww4fb+VK894N346gs/WE= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:Received:Received:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=GC6g5s0ZBRHGLap/OU7/nBZjC+o/E3MSp9EREEsbn1+CK4Dvtam+C8zVQyL1gp 8Z2O42ONvzrjT2rjrIgf1ZB8bXlEY1MVWi4mX5F8cb+Ot0uDF5FL6VherkVtvla8 1NAKDBgo2hN4fEmOrR8IPdeg/nWtBWW0ga6yz0yA46E0A=; Received: (qmail 29112 invoked by alias); 25 Oct 2012 02:48:00 -0000 Received: (qmail 29101 invoked by uid 22791); 25 Oct 2012 02:47:59 -0000 X-SWARE-Spam-Status: No, hits=-5.6 required=5.0 tests=AWL, BAYES_00, FSL_NEW_HELO_USER, KHOP_THREADED, RCVD_IN_HOSTKARMA_NO, RCVD_IN_HOSTKARMA_YE, RP_MATCHES_RCVD, SPF_NEUTRAL X-Spam-Check-By: sourceware.org Received: from userp1040.oracle.com (HELO userp1040.oracle.com) (156.151.31.81) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 25 Oct 2012 02:47:54 +0000 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by userp1040.oracle.com (Sentrion-MTA-4.2.2/Sentrion-MTA-4.2.2) with ESMTP id q9P2lqOe022714 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 25 Oct 2012 02:47:53 GMT Received: from acsmt358.oracle.com (acsmt358.oracle.com [141.146.40.158]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id q9P2lpCv020870 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 25 Oct 2012 02:47:52 GMT Received: from abhmt104.oracle.com (abhmt104.oracle.com [141.146.116.56]) by acsmt358.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id q9P2lpCs011041; Wed, 24 Oct 2012 21:47:51 -0500 Received: from [192.168.1.4] (/79.52.211.59) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 24 Oct 2012 19:47:51 -0700 Message-ID: <5088A855.5090504@oracle.com> Date: Thu, 25 Oct 2012 04:47:49 +0200 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121010 Thunderbird/16.0.1 MIME-Version: 1.0 To: Jason Merrill CC: "gcc-patches@gcc.gnu.org" Subject: Re: [C++ Patch] PR 34892 References: <5088236A.4060408@oracle.com> <508825CB.8050307@redhat.com> <50882F6D.50005@oracle.com> <50884757.5020402@redhat.com> <50888B56.30701@oracle.com> <50889BA2.8000408@redhat.com> In-Reply-To: <50889BA2.8000408@redhat.com> 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, On 10/25/2012 03:53 AM, Jason Merrill wrote: > We can stop it even sooner: > >> /* If the next token is an ellipsis, and we don't already have it >> marked as a parameter pack, then we have a parameter pack (that >> has no declarator). */ >> if (!*is_parameter_pack >> && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS) >> && declarator_can_be_parameter_pack >> (parameter_declarator->declarator)) > > We shouldn't even consider this if there was a default argument. Ah great, thanks. The below also regtests fine. Thanks again, Paolo. //////////////////////// Index: cp/parser.c =================================================================== --- cp/parser.c (revision 192786) +++ cp/parser.c (working copy) @@ -12258,12 +12258,21 @@ cp_parser_template_parameter (cp_parser* parser, b parameter_declarator->declarator->parameter_pack_p = false; } + if (parameter_declarator + && parameter_declarator->default_argument) + { + /* Can happen in some cases of erroneous input (c++/34892). */ + if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)) + /* Consume the `...' for better error recovery. */ + cp_lexer_consume_token (parser->lexer); + } /* If the next token is an ellipsis, and we don't already have it marked as a parameter pack, then we have a parameter pack (that has no declarator). */ - if (!*is_parameter_pack - && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS) - && declarator_can_be_parameter_pack (parameter_declarator->declarator)) + else if (!*is_parameter_pack + && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS) + && (declarator_can_be_parameter_pack + (parameter_declarator->declarator))) { /* Consume the `...'. */ cp_lexer_consume_token (parser->lexer); Index: testsuite/g++.dg/template/crash114.C =================================================================== --- testsuite/g++.dg/template/crash114.C (revision 0) +++ testsuite/g++.dg/template/crash114.C (working copy) @@ -0,0 +1,5 @@ +// PR c++/34892 + +template struct A {}; // { dg-error "expected primary" } + +A<0> a;