From patchwork Wed Jan 17 17:41:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 862426 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-471501-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="W9TPby99"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zMDtJ0FcVz9s7f for ; Thu, 18 Jan 2018 04:41:59 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:content-type; q= dns; s=default; b=XlK8/2gLQTbCFA+d/Hnfv/S2FDmQVN+TBlVXUrXQH+miTx sFAlhUgmjgnEE+4flFFg2MyoBJcHjsPc3UTtZkDHzHodXI0ObkuKKhqbodu5kHeM OnPoxEHM7UUbh6D3OSPvNdwDGHnBmMXKt202jUl0C772zWJiSp8TrPyQJf+j8= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:content-type; s= default; bh=SpX9dEJA5zLqkBkTjw1J8Lpkeho=; b=W9TPby99U6HgeCc6g3dz K0Blo/OG3q43uoQ75ecpnY5ya1r7NarCax7sursezIaPQy0nvzK6n3lo2RrPo1O+ wLmSl4s1bP2qWsh9VvXc+xQZY+l02n7nZfzHBRumuJfHTAIdSMOK7XYuEGylZquT wgPNWMd7qZxn2R0itfboBL0= Received: (qmail 58152 invoked by alias); 17 Jan 2018 17:41:52 -0000 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 Received: (qmail 58138 invoked by uid 89); 17 Jan 2018 17:41:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=remembered, Hx-languages-length:1820 X-HELO: mail-io0-f174.google.com Received: from mail-io0-f174.google.com (HELO mail-io0-f174.google.com) (209.85.223.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 17 Jan 2018 17:41:50 +0000 Received: by mail-io0-f174.google.com with SMTP id z6so4710252iob.11 for ; Wed, 17 Jan 2018 09:41:50 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Fr4tDayojZq+8xsjD5cYgJ0bADHMcxELGTRMx2JXMMk=; b=bFjuKTjNl2LbSSTDKzkrJbegyerMkZnBLP9KVKoAaKXCQNGzMYQ3hhmiORt2paBlpo o6xyywThJiaSsMv5jv40P4krcvQK92BtZD3yudL686NKiZL0MuY7Tvp9DEFZTiqMmAkb TGL3X+tjjGUnCkFipobwE1k1FYV90AB4cxNld/7dw2IuW4i+Y233gY+8AsfQ/jM95d5T eSca7BDKkv7r4zycZgqeZf8wbIKbmt/hTD8AtkiahFlS77VdYxxeDK9MVjRzM/F7FKXd MMbH6q6BGSdPjyGKpmPNOYlffytV30NjXVZhhcmrpplJzuE0//g6CSIHAolEAP4T/iDY kG+A== X-Gm-Message-State: AKwxytezbQhoBB2dzukIHdSLZGW5HbMktCOcXsIK3g46exlz7D4p5dq2 iLKAQVTUbW9xg33nkq+MuF6aaOgyNqhr3gXL1INV4AQe X-Google-Smtp-Source: ACJfBouZlNWMLow51EmEOqG2P83FwLFH00fHmm3bKXoTfHiVPlufmVwmAtNwB+O4m03tPfhM1AATqUZoMUAjp9vbFhA= X-Received: by 10.107.47.137 with SMTP id v9mr3891414iov.217.1516210908265; Wed, 17 Jan 2018 09:41:48 -0800 (PST) MIME-Version: 1.0 Received: by 10.107.157.202 with HTTP; Wed, 17 Jan 2018 09:41:27 -0800 (PST) From: Jason Merrill Date: Wed, 17 Jan 2018 12:41:27 -0500 Message-ID: Subject: C++ PATCH for c++/81843, ICE with member variadic template To: gcc-patches List X-IsSubscribed: yes My patch for 72801 added in enclosing template arguments, but then as a result we wrongly tried to deduce them. Tested x86_64-pc-linux-gnu, applying to trunk and 7. commit 7b299d41c412665a03c5bcdb088d3a39dc86d9c2 Author: Jason Merrill Date: Wed Jan 17 11:12:23 2018 -0500 PR c++/81843 - ICE with variadic member template. PR c++/72801 * pt.c (unify_pack_expansion): Don't try to deduce enclosing template args. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 322408d92ec..1c7b91ac0df 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -20356,6 +20356,7 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms, /* Add in any args remembered from an earlier partial instantiation. */ targs = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (parm), targs); + int levels = TMPL_ARGS_DEPTH (targs); packed_args = expand_template_argument_pack (packed_args); @@ -20371,6 +20372,8 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms, /* Determine the index and level of this parameter pack. */ template_parm_level_and_index (parm_pack, &level, &idx); + if (level < levels) + continue; /* Keep track of the parameter packs and their corresponding argument packs. */ diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic171.C b/gcc/testsuite/g++.dg/cpp0x/variadic171.C new file mode 100644 index 00000000000..1e268141d6d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic171.C @@ -0,0 +1,12 @@ +// PR c++/81843 +// { dg-do compile { target c++11 } } + +template < typename > struct A; +template < typename, typename > struct B; +template < typename ... S > struct C +{ + template < typename > struct D {}; + template < typename ... T > struct D < A < B < S, T > ... > >; +}; + +C <>::D < A < B < int, int > > > c;