From patchwork Wed Jan 11 20:39:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 90993 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp1309446qgi; Wed, 11 Jan 2017 12:40:12 -0800 (PST) X-Received: by 10.84.136.75 with SMTP id 69mr2521736plk.172.1484167212328; Wed, 11 Jan 2017 12:40:12 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id o21si6812473pgj.240.2017.01.11.12.40.11 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Jan 2017 12:40:12 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-445904-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org; spf=pass (google.com: domain of gcc-patches-return-445904-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-445904-patch=linaro.org@gcc.gnu.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to:cc :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=iYpRMebrFlJAl0vg2Jxlh4LL3WxV9hes66Tf62tPRVumDfac6S wwUz4GTtj4v3nDZjj+YfG8KY9SBxLm+FBOjxx6/F7YNHv515xm6toVDTBQ7TSh9h v2YRsEluTaazYRSj7KjSFXXxoOnmHYgPlLeZODbK8tsKRhGJLUWrBEKv0= 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:cc :from:subject:message-id:date:mime-version:content-type; s= default; bh=hfLM+n33yaNyjMteyORvO9aMoLU=; b=jnXUXWJYdI73i1TfH/Mf Kx122UOd6DF03KMIEwKJDFoS31iFdk094h+BrL3FMux3bI+QZdgJm969zvczdzsZ IS4JEYEEsFCLaFdqEi63uzJwRwyL7wweV9jQDSgKtXznMxTBNx1Wx/lwYUDh9RIt qMnTCpsq8qU1xk+XOPEIGg8= Received: (qmail 72504 invoked by alias); 11 Jan 2017 20:39:59 -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 72495 invoked by uid 89); 11 Jan 2017 20:39:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=no version=3.3.2 spammy=Hx-languages-length:1862, H*MI:1906, H*M:1906 X-HELO: mail-yw0-f195.google.com Received: from mail-yw0-f195.google.com (HELO mail-yw0-f195.google.com) (209.85.161.195) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 11 Jan 2017 20:39:48 +0000 Received: by mail-yw0-f195.google.com with SMTP id a10so17125209ywa.1 for ; Wed, 11 Jan 2017 12:39:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:to:cc:from:subject:message-id:date :user-agent:mime-version; bh=/jlBFreoF9OCQh30Q/sFLQ6ImupQ0sxB3U5Zv7f6XiY=; b=OEE+ZyTUbOKYChMkOCD55u+Sy4Oe+rpJAk9kpgxPUcRkFiLj6A/k6Tm10AQ9f98kWs UzvvTETyy2h2CmuOY7QPJFWpvUJUfsM3qYNC/NkxJaiKa0HQcNZhefrOhPwDOoqiVpmr nN2+kcW4Qf2Uo7Egmuz/VrXdp9riaYxPwXC5u85qsL2AxA8FTJrCLnh3s1L8uESJsRZR BsdfAGqf4kRbyvdZZgl1D489poX9iP+/dzyK1uCiLo9pYo1Y40jZ4GL3kEhclvavCD1a XZQqBYojuqoIWRFBpMBYv1gCFwItG3u4/fOe45VDbbv/6zWJvFulJXlKDd+UOgnC9L0v 4HSA== X-Gm-Message-State: AIkVDXIE8kD3BcApgIAlL4MPOaOQ9RzsGXZk/+ub/R+gw2bz3nueAtk1Dg+a/2DMT1IdvQ== X-Received: by 10.13.224.129 with SMTP id j123mr9700166ywe.181.1484167187323; Wed, 11 Jan 2017 12:39:47 -0800 (PST) Received: from ?IPv6:2620:10d:c0a3:20fb:f6d0:5ac5:64cd:f102? ([2620:10d:c091:200::d:41ba]) by smtp.googlemail.com with ESMTPSA id p193sm2791293ywe.55.2017.01.11.12.39.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Jan 2017 12:39:46 -0800 (PST) To: GCC Patches Cc: Jason Merrill From: Nathan Sidwell Subject: [C++ PATCH] PR/77812 struct stat hack fix Message-ID: <161a292f-926f-c7a2-1906-5babafa8d0a2@acm.org> Date: Wed, 11 Jan 2017 15:39:45 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 issue 77812 turned out to be a srtuct stat hack problem, the bisected commit a red herring (that just made it noisy for the enum case). We wrap using decls and template functions in a singleton overload, and this can confuse set_namespace_binding into thinking we're augmenting an existing OVERLOAD binding. We need to check for this case and use supplement_binding in that case, just as if it was a non-overload. Applied to trunk (and will backport to 5 & 6) nathan -- Nathan Sidwell 2017-01-11 Nathan Sidwell cp/ PR c++/77812 * name-lookup.c (set_namespace_binding_1): An overload of 1 decl is a new overload. testsuite/ PR c++/77812 * g++.dg/pr77812.C: New. Index: cp/name-lookup.c =================================================================== --- cp/name-lookup.c (revision 244334) +++ cp/name-lookup.c (working copy) @@ -3496,7 +3496,12 @@ set_namespace_binding_1 (tree name, tree if (scope == NULL_TREE) scope = global_namespace; b = binding_for_name (NAMESPACE_LEVEL (scope), name); - if (!b->value || TREE_CODE (val) == OVERLOAD || val == error_mark_node) + if (!b->value + /* For templates and using we create a single element OVERLOAD. + Look for the chain to know whether this is really augmenting + an existing overload. */ + || (TREE_CODE (val) == OVERLOAD && OVL_CHAIN (val)) + || val == error_mark_node) b->value = val; else supplement_binding (b, val); Index: testsuite/g++.dg/pr77812.C =================================================================== --- testsuite/g++.dg/pr77812.C (revision 0) +++ testsuite/g++.dg/pr77812.C (working copy) @@ -0,0 +1,18 @@ +// PR77812 +// struct-stat hack failure when first overload is a template + +enum f {}; + +template +void f () +{ +} +enum f F; + +struct g {}; + +template +void g () +{ +} +struct g G;