From patchwork Fri Nov 4 12:46:52 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 691251 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3t9M775QlLz9vG9 for ; Fri, 4 Nov 2016 23:47:31 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="yQtTfWBz"; dkim-atps=neutral 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=rFuG85OttcOpU5I8KjG9gCk8AubeYk9X/IpThvapJxSqKr NetOrcl/OvVAKusB4VzKkIZB7Ulq8PCXD7lb3WhUw60Q+Jk24oPTDq6blfwcvqhq 1HUjY3TWzTDN9QC0u5P6+WVlc1iG7mCe448Vgb8F5xBp0P9p66IBu+4emoD5g= 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=7QbvrlelkaI/sjHutda2/A0etfc=; b=yQtTfWBz5eeAGmAJmpm8 hljquCYmkqpVQ9y+N5o/1YoZHBCPOunoFAqKIQhaaVs02uMYcgb1pfZ+vqIvCFYj hKQ6dJqJJ/woUtu3wtJ7aTVi55aSTjmakJ+lUomIo2/iBQU4K3l3AXov4YNuw94v vW97nInpiIEBJyNqxPW1nqs= Received: (qmail 83842 invoked by alias); 4 Nov 2016 12:47:17 -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 83127 invoked by uid 89); 4 Nov 2016 12:47:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.4 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM autolearn=no version=3.3.2 spammy=inherited X-HELO: mail-oi0-f45.google.com Received: from mail-oi0-f45.google.com (HELO mail-oi0-f45.google.com) (209.85.218.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 04 Nov 2016 12:47:15 +0000 Received: by mail-oi0-f45.google.com with SMTP id v84so158398868oie.3 for ; Fri, 04 Nov 2016 05:47:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=K6lWDXLZla75I7eyRB0XhD2Std/m+KEXvsT8RMLo0aY=; b=A0DOn41jl4t/f1xDC69LfwvmzJPvNIPObGX+ZQMuq5OMSGXivWO5DEMJAClG9VdRUJ Wxx6o5fHfNQn6ncd2CJVVVxSKdN/AFaZsiCceh6ovHuKo6E5hlshRMwr069PlwS+vILN F9WtOys5tCfgaU85W6+nNUE3uXdXpaAYn4X1F1g1mYTzcqGsfO2pIiK+sWc8UI4QG9tu qX4Y1IlK3fjbTrmEXCcGL28LNokZZahj1oesaZKfKL/pkcJ7RfyDcVCxK2Du6cTCD3sR qd5x1oHOMDY6b1vaJbztcThkZD6NyajEwcX8TF0oDlLudWm2mgHe/uCpqbx5mDnKpdez Z7Yg== X-Gm-Message-State: ABUngvdF9ClET+VMyzWRx8/2rfrOXgsQAEDjnZWeHkCUaMl80s2KEN/e11veZpVqSbV166b4ju3Yx5WCR52MFb95 X-Received: by 10.157.46.149 with SMTP id w21mr9373026ota.219.1478263633358; Fri, 04 Nov 2016 05:47:13 -0700 (PDT) MIME-Version: 1.0 Received: by 10.183.13.228 with HTTP; Fri, 4 Nov 2016 05:46:52 -0700 (PDT) From: Jason Merrill Date: Fri, 4 Nov 2016 08:46:52 -0400 Message-ID: Subject: C++ PATCH for c++/78198 (inherited template ctor with default arg) To: gcc-patches List X-IsSubscribed: yes Default arguments of an inherited ctor remain in the context of the inherited function, not the artificial inheriting constructor. Tested x86_64-pc-linux-gnu, applying to trunk. commit d6ceff13167956b660317ef37a40ba7110d325c4 Author: Jason Merrill Date: Thu Nov 3 16:14:51 2016 -0400 PR c++/78198 - inherited template ctor with default arg * call.c (convert_default_arg): Look through inheriting ctors. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 27aa7fd..d2e99bc 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -7193,6 +7193,9 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum, /* See through clones. */ fn = DECL_ORIGIN (fn); + /* And inheriting ctors. */ + if (flag_new_inheriting_ctors) + fn = strip_inheriting_ctors (fn); /* Detect recursion. */ FOR_EACH_VEC_SAFE_ELT (default_arg_context, i, t) diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor22.C b/gcc/testsuite/g++.dg/cpp0x/inh-ctor22.C new file mode 100644 index 0000000..1b0e242 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor22.C @@ -0,0 +1,16 @@ +// { dg-do compile { target c++11 } } + +class A { }; +template using UniquePtr = int; +template struct BufferList { + BufferList(unsigned, unsigned, unsigned, AllocPolicy = AllocPolicy()); +}; +class D : BufferList { + using BufferList::BufferList; +}; +template UniquePtr MakeUnique(Args... aArgs) +{ + D d(aArgs...); + return 0; +} +UniquePtr setCloneBuffer_impl_buf = MakeUnique(0, 0, 0);