From patchwork Wed Mar 21 10:58:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 888688 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-475147-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=acm.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="fFoxkiOD"; 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 405myC0vC8z9s0m for ; Wed, 21 Mar 2018 21:58:58 +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:to :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=hAfq7q5ABj8i8+TRGvf79uYpMVjnyNs6lz6zQB07IqalxYzB6c ESJdvSFi7Hxk/LOCohNZd4p7KgkjfpiRt8mwJl/l8K2aiFP/BLK+2gizWn9xIQ21 GHl0V98oXQVVbYYSnuPYt0Arlp8LtbMjI3RfX1w6ByEmMLcQpEBXtiK2g= 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:to :from:subject:message-id:date:mime-version:content-type; s= default; bh=4DJPWFkpydp9LCgFqahkNyN9mQk=; b=fFoxkiODFBq6zrQ9SdTk AGKPO6ajEfcjTJmW3r2huLm+ZU8M5xiGZnTR1LN6uW9s/dNe85AEZOf95+RbqWeO euwYMJCTolJWnbGZgMhrKF66PLcrZ+rqpgA2Ul2taE0QW44+q3VCOhtOPjvL/s2J P2iiPZuOx3J6SDCKyHgyFuc= Received: (qmail 69614 invoked by alias); 21 Mar 2018 10:58: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 69602 invoked by uid 89); 21 Mar 2018 10:58:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.1 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-qk0-f176.google.com Received: from mail-qk0-f176.google.com (HELO mail-qk0-f176.google.com) (209.85.220.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 21 Mar 2018 10:58:49 +0000 Received: by mail-qk0-f176.google.com with SMTP id b198so4905488qkg.9 for ; Wed, 21 Mar 2018 03:58:49 -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:to:from:subject:message-id:date :user-agent:mime-version:content-language; bh=9To9lAUwOWodewqM3xQR2ghppYfq3v9KtJRBYFtKNyA=; b=Qn1D+L1wjeUtuhyXDGSQgC6U1rvVmAVSCLm9/3MXGJU+KqbjTt5KBmvhlzaUskvfi1 iZ0i2PBg7YNMlwvtIsn/WOwJwPIAIXMhcL4Ujb7w0Vqdfp0Fdm3gnRik96ixCWhC1o1e BRg7Qx5MrGDtcPFmD3v1nEG/0du/7oiV+jBCQRjtAzjXlF/ykGSpmx2NHQXspBRHBN4a HzNLs3JwZZ5KaFM6lD3czjImxHKqVPg+A7T6qWWXm7L3KQUNKsYwc+HimS41U3+SOgHU cb3rS7GQzyYJlalTQRN++V1LhyXtsu3oboq88Oa8xGC9FzVMEe3JXmbEjZDgmqJmOjQM MiBg== X-Gm-Message-State: AElRT7GvFSktpitvwXem19EIEdKvS6DCbEvba5lgR0WQyBA4UoPkz4GC bU37OTNqtsVvflBXSa+m0h4= X-Google-Smtp-Source: AG47ELvtz29n5CCJJUjNmFAYxnraA5KElOjGHcUNpqgHlWNMU+wBbO15p6vXbvm123X32CDpQ1SV1g== X-Received: by 10.55.141.2 with SMTP id p2mr27035037qkd.43.1521629927615; Wed, 21 Mar 2018 03:58:47 -0700 (PDT) Received: from ?IPv6:2620:10d:c0a3:20fb:7500:e7fb:4a6f:2254? ([2620:10d:c091:200::2:9c2a]) by smtp.googlemail.com with ESMTPSA id r14sm2740620qti.24.2018.03.21.03.58.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Mar 2018 03:58:46 -0700 (PDT) To: GCC Patches From: Nathan Sidwell Subject: [PR c++/84836] ICE with local scopes Message-ID: <733d0af5-512d-05b3-eb36-6bf8a70d82fc@acm.org> Date: Wed, 21 Mar 2018 06:58:45 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 I'd flubbed the condition on when a local binding was updated, leading to an ICE when popping them. For a local overload set we need to look in the binding list and find the one to update. We didn't do that when we'd already hidden a TYPE_DECL of the same name. Fixed thusly. nathan 2018-03-21 Nathan Sidwell PR c++/84836 * name-lookup.c (update_binding): Correct logic for local binding update. PR c++/84836 * g++.dg/lookup/pr84836.C: New. Index: gcc/cp/name-lookup.c =================================================================== --- gcc/cp/name-lookup.c (revision 258710) +++ gcc/cp/name-lookup.c (working copy) @@ -2481,21 +2481,12 @@ update_binding (cp_binding_level *level, done: if (to_val) { - if (level->kind != sk_namespace - && !to_type && binding->value && OVL_P (to_val)) - update_local_overload (binding, to_val); + if (level->kind == sk_namespace || to_type == decl || to_val == decl) + add_decl_to_level (level, decl); else { - tree to_add = to_val; - - if (level->kind == sk_namespace) - to_add = decl; - else if (to_type == decl) - to_add = decl; - else if (TREE_CODE (to_add) == OVERLOAD) - to_add = build_tree_list (NULL_TREE, to_add); - - add_decl_to_level (level, to_add); + gcc_checking_assert (binding->value && OVL_P (binding->value)); + update_local_overload (binding, to_val); } if (slot) Index: gcc/testsuite/g++.dg/lookup/pr84836.C =================================================================== --- gcc/testsuite/g++.dg/lookup/pr84836.C (revision 0) +++ gcc/testsuite/g++.dg/lookup/pr84836.C (working copy) @@ -0,0 +1,9 @@ +// PR c++/84836 +// ICE popping local binding + +void foo (void) +{ + struct A; + void A (int); + void A (long); +}