From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20890 invoked by alias); 8 May 2017 17:02:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 20836 invoked by uid 89); 8 May 2017 17:02:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.4 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-yw0-f178.google.com Received: from mail-yw0-f178.google.com (HELO mail-yw0-f178.google.com) (209.85.161.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 08 May 2017 17:02:04 +0000 Received: by mail-yw0-f178.google.com with SMTP id l135so32424758ywb.2 for ; Mon, 08 May 2017 10:02:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language; bh=OIMsRQ7LkLz7A/wFVWRefNmddRX/7m+yYxQOm6/YwG8=; b=Ae2YXo2Tp7EZy1+EQGUQ8QSZa9Wj7WRs4MsmBULBwW2HNFERp/d3Nv43imSm+CoXDR 3TirZRRwvRDbJ4Ph6ry8DjCToqCh/K4ZIr3f/UDgsubGTS0GEBNChsoHFpMGILfiheYV 5djV94ETLMUP6EqHO3nXvG2awf37SDYjZt3VwtI24SYHC7PhkkUnkRd6VlAgWY0rIhDE 99tKz0vha3nWn56mcsz7NfgB9v0jynQWzRKrE4/N30iThSzMlIg/3tpAXwje6Tk/j+X8 dE0hbSUKsUDiaCxAkHfwVni5C73LnCLI6MuFrTEl8U3amhL+YkSupK4XqyH9eDrX9nJD uQqA== X-Gm-Message-State: AODbwcACT+tzFc9Cwav0L4huDy8+OZATH01zkXRWHZtJx3WPZNh3HNFY jT+qPq00Jn79TQ== X-Received: by 10.13.207.6 with SMTP id r6mr1103486ywd.7.1494262924753; Mon, 08 May 2017 10:02:04 -0700 (PDT) Received: from ?IPv6:2620:10d:c0a3:20fb:f6d0:5ac5:64cd:f102? ([2620:10d:c091:200::2:16e0]) by smtp.googlemail.com with ESMTPSA id g65sm7287258ywh.29.2017.05.08.10.02.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 May 2017 10:02:03 -0700 (PDT) Subject: Re: [C++ PATCH] namespace bindings To: Andreas Schwab Cc: GCC Patches References: From: Nathan Sidwell Message-ID: Date: Mon, 08 May 2017 17:03:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------DD56378E0AFFFE467E26F274" X-SW-Source: 2017-05/txt/msg00571.txt.bz2 This is a multi-part message in MIME format. --------------DD56378E0AFFFE467E26F274 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 356 On 05/08/2017 11:17 AM, Andreas Schwab wrote: > g++.dg/cpp0x/defaulted34.C has the same problem. I'd managed to flub my xcompiler build. The code path for fn-descriptor-using targets is different, and I'd missed that the shadowed outer 'fn' was expected to have been initialized in that case. Committed the attached fix. nathan -- Nathan Sidwell --------------DD56378E0AFFFE467E26F274 Content-Type: text/x-patch; name="vtb.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="vtb.diff" Content-length: 1376 2017-05-08 Nathan Sidwell * class.c (build_vtbl_initializer): Don't shadow outer variable with static var. Index: cp/class.c =================================================================== --- cp/class.c (revision 247746) +++ cp/class.c (working copy) @@ -9769,18 +9769,19 @@ build_vtbl_initializer (tree binfo, /* Likewise for deleted virtuals. */ else if (DECL_DELETED_FN (fn_original)) { - static tree fn; + static tree dvirt_fn; - if (!fn) + if (!dvirt_fn) { tree name = get_identifier ("__cxa_deleted_virtual"); - fn = IDENTIFIER_GLOBAL_VALUE (name); - if (!fn) - fn = push_library_fn + dvirt_fn = IDENTIFIER_GLOBAL_VALUE (name); + if (!dvirt_fn) + dvirt_fn = push_library_fn (name, build_function_type_list (void_type_node, NULL_TREE), NULL_TREE, ECF_NORETURN); } + fn = dvirt_fn; if (!TARGET_VTABLE_USES_DESCRIPTORS) init = fold_convert (vfunc_ptr_type_node, build_fold_addr_expr (fn)); @@ -9789,7 +9790,8 @@ build_vtbl_initializer (tree binfo, { if (!integer_zerop (delta) || vcall_index) { - fn = make_thunk (fn, /*this_adjusting=*/1, delta, vcall_index); + fn = make_thunk (fn, /*this_adjusting=*/1, + delta, vcall_index); if (!DECL_NAME (fn)) finish_thunk (fn); } --------------DD56378E0AFFFE467E26F274--