From patchwork Mon Jan 23 17:09:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 718692 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 3v6d9F5LP2z9t0k for ; Tue, 24 Jan 2017 04:10:08 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="adsfTif/"; 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:to:cc :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=t7sn58zQ4wLTVgyaqRgEVIZ/HlvHA9y19j2gbUhv+LBI+XhCZ2 SE4hlxt0NCrhQ82f4sfbPGFSGNcZQkST+y60Bwme+/NQ1TNRbwNnxtFP0AcA7WMW aDr2zD99Cic2FLzBG0sJiEWXhpL1eYHcHZQ9jJEGlMUyBRaIcnd9XU0PE= 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=BaMYr/uqyVf64UxH8HUKRSZymnU=; b=adsfTif/WdCoB1z8Fmvj 8/Yrc859rMsRTY1lZJ864oYiL+Q5BcAu/EjJqhhyUVLyX56RplP4030j6XcXCkG7 FKIs7EXjCHt4FQWQz3if31Jbjw3Yr9UNxrbstvt8xXViCTvf6I7UGFrlPcsNW8/q lWsJdFNdEuEbiXJr1MZrL6s= Received: (qmail 61912 invoked by alias); 23 Jan 2017 17:10:00 -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 61897 invoked by uid 89); 23 Jan 2017 17:09:59 -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=nathan@acm.org, nathanacmorg, COMPONENT_REF, component_ref X-HELO: mail-yw0-f182.google.com Received: from mail-yw0-f182.google.com (HELO mail-yw0-f182.google.com) (209.85.161.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 23 Jan 2017 17:09:48 +0000 Received: by mail-yw0-f182.google.com with SMTP id l19so142189821ywc.2 for ; Mon, 23 Jan 2017 09:09: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=rzL535aGLeThJQ0nVa+xEZw6ZnMmB7beSRl4H0ZpMrU=; b=HbxIE/S9jS13TN9u9TcEFXjk2nCyY6J6Eaqy6eTNuNoW2uBF/c+K2SsirpYxG7iWB3 Dna/FNUrekA6KgrNnVF84G5xCfIlRg0zUBqNQ3X0ytOHQSZ/CWt4/BA8rdU21s1+Y+/P oQ+cmpGcaZcP5SRCASqbK+p2OtCSq1OELnb9BtQrn/HfpWgcY3RoqF2IBH32JWMtDMeC 9EFZo0mxdrwtHPkCG5XXNcvS8QHAcg23ZT+fGNwJlIboVglziIQQYDk4PHBbHqEJnC90 KYxnjFsFgM9kvb1thXBbPFreio32k6zWozS+GzArWZ3m3gHMGJYeFFjnhson5rejdwCn /tbg== X-Gm-Message-State: AIkVDXLBDxo+VIcMr4H6YdwYp6z16VBrPXoWgf6VCe8rZCurUA2Mi/4MUjTjiUcJesGbWg== X-Received: by 10.129.108.215 with SMTP id h206mr21828167ywc.164.1485191387378; Mon, 23 Jan 2017 09:09:47 -0800 (PST) Received: from ?IPv6:2620:10d:c0a3:20fb:f6d0:5ac5:64cd:f102? ([2620:10d:c091:200::9:7c73]) by smtp.googlemail.com with ESMTPSA id c126sm8395754ywf.45.2017.01.23.09.09.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Jan 2017 09:09:45 -0800 (PST) To: Jason Merrill Cc: GCC Patches From: Nathan Sidwell Subject: [c== pATCH] 71710 dependent FIELD_DECL Message-ID: <32979419-a390-d0a5-85ca-353ae660e724@acm.org> Date: Mon, 23 Jan 2017 12:09:44 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 Jason, Bug 71710 is a crash on 'decltype (a)', where 'a' is a FIELD_DECL wth dependent type. finish_class_member_access_expr barfs on that. The earlier sequence of if..elses has a check for FIELD_DECL, but that's in the shadow of a type_dependent_expression_p (object) check. The field's type is the main template type, so it does have a type dependent object. But there's no reason it shouldn't go through the usual finish_non_static_data_member processing. Fixed by moving the FIELD_DECL check earlier. ok? nathan 2017-01-23 Nathan Sidwell PR c++/71710 - template using directive of field * pt.c (tsubst_copy_and_build [COMPONENT_REF]): Move FIELD_DECL check earlier. PR C++/71710 * g++.dg/template/pr71710.C: New. Index: cp/pt.c =================================================================== --- cp/pt.c (revision 244815) +++ cp/pt.c (working copy) @@ -17470,7 +17470,14 @@ tsubst_copy_and_build (tree t, if (member == error_mark_node) RETURN (error_mark_node); - if (type_dependent_expression_p (object)) + if (TREE_CODE (member) == FIELD_DECL) + { + r = finish_non_static_data_member (member, object, NULL_TREE); + if (TREE_CODE (r) == COMPONENT_REF) + REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t); + RETURN (r); + } + else if (type_dependent_expression_p (object)) /* We can't do much here. */; else if (!CLASS_TYPE_P (object_type)) { @@ -17535,13 +17542,6 @@ tsubst_copy_and_build (tree t, } RETURN (error_mark_node); } - else if (TREE_CODE (member) == FIELD_DECL) - { - r = finish_non_static_data_member (member, object, NULL_TREE); - if (TREE_CODE (r) == COMPONENT_REF) - REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t); - RETURN (r); - } r = finish_class_member_access_expr (object, member, /*template_p=*/false, Index: testsuite/g++.dg/template/pr71710.C =================================================================== --- testsuite/g++.dg/template/pr71710.C (revision 0) +++ testsuite/g++.dg/template/pr71710.C (working copy) @@ -0,0 +1,10 @@ +// { dg-do compile { target c++11 } } +// PR C++/71710 ICE with decltype & using + +template < typename > struct A +{ + A a; + template < int > using B = decltype (a); + B < 0 > b; + template < int C > B < C > foo (); +};