From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 127890 invoked by alias); 13 Dec 2018 19:48:54 -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 127742 invoked by uid 89); 13 Dec 2018 19:48:40 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS,TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy= X-HELO: mail-qk1-f196.google.com Received: from mail-qk1-f196.google.com (HELO mail-qk1-f196.google.com) (209.85.222.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 13 Dec 2018 19:48:24 +0000 Received: by mail-qk1-f196.google.com with SMTP id g125so1657017qke.4 for ; Thu, 13 Dec 2018 11:48:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:references:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=HH3gBd4ynLV0bbGzYJI4Sw0mnwjIhOrppsKzzs0JR4s=; b=Vxh/Zr1uR7KWjIQySf12sc5C67DGg3m1qHG9GVN61hPhTirx8kHo8eOYRt3Zz193l2 +aHRSH61oqdsHLy29zH3UYptoszMnTh3NAelZfdrPfFRRNWhkK6keEUZbzxkAdxkBFpo 6rw05jmjlBAl/JI5nDexcOxiPMHSGcHLmENM2hANWmDqwe+KBPcjzHk2Z3+zo79YxbAN BbvTx8ZYbG2pi4L0/dbwgc+uDGHEabkzUM3GYBFWorR7iRzHQ5mgpCOJ5p5T/ZnwTjyF IqeHQ75JRpsxZjBGaC1F23vg0Y+Kbff235scGuTOCdfPY5a3lTxvU/+OzJW9lDolcBEO 3nDQ== Return-Path: Received: from localhost.localdomain (97-118-99-160.hlrn.qwest.net. [97.118.99.160]) by smtp.gmail.com with ESMTPSA id y70sm1247921qka.75.2018.12.13.11.48.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Dec 2018 11:48:20 -0800 (PST) Subject: Re: [PATCH] handle expressions in __builtin_has_attribute (PR 88383) From: Martin Sebor To: Jeff Law , Gcc Patch List References: <6b1f15b6-1446-21a2-54aa-b92ec6b5541f@redhat.com> <5599edd4-61ad-24ce-d19e-376dd9398183@gmail.com> Message-ID: <688c62e2-966a-c950-ca63-b58003610c62@gmail.com> Date: Thu, 13 Dec 2018 19:48:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.1 MIME-Version: 1.0 In-Reply-To: <5599edd4-61ad-24ce-d19e-376dd9398183@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2018-12/txt/msg00974.txt.bz2 On 12/13/18 12:20 PM, Martin Sebor wrote: > On 12/13/18 11:59 AM, Jeff Law wrote: >> On 12/5/18 8:55 PM, Martin Sebor wrote: >>> The __builtin_has_attribute function fails with an ICE when >>> its first argument is an expression such as INDIRECT_REF, or >>> many others.  The code simply assumes it's either a type or >>> a decl.  The attached patch corrects this oversight. >>> >>> While testing the fix I also noticed the C++ front end expects >>> the first operand to be a unary expression, which causes most >>> other kinds of expressions to be rejected.  The patch fixes >>> that as well. >>> >>> Finally, while testing the fix even more I realized that >>> the built-in considers the underlying array itself in ARRAY_REF >>> expressions rather than its type, which leads to inconsistent >>> results for overaligned arrays (it's the array itself that's >>> overaligned, not its elements).  So I fixed that too and >>> adjusted the one test designed to verify this. >>> >>> Tested on x86_64-linux. >>> >>> Martin >>> >>> gcc-88383.diff >>> >>> PR c/88383 - ICE calling __builtin_has_attribute on a reference >>> >>> gcc/c-family/ChangeLog: >>> >>>     PR c/88383 >>>     * c-attribs.c (validate_attribute): Handle expressions. >>>     (has_attribute): Handle types referenced by expressions. >>>     Avoid considering array attributes in ARRAY_REF expressions . >>> >>> gcc/cp/ChangeLog: >>> >>>     PR c/88383 >>>     * parser.c (cp_parser_has_attribute_expression): Handle assignment >>>     expressions. >>> >>> gcc/testsuite/ChangeLog: >>> >>>     PR c/88383 >>>     * c-c++-common/builtin-has-attribute-4.c: Adjust expectations. >>>     * c-c++-common/builtin-has-attribute-6.c: New test. >> Well, the high level question here is do we want to support this builtin >> on expressions at all.  Generally attributes apply to types and decls, >> not expressions. >> >> Clearly we shouldn't fault, but my first inclination is that the >> attribute applies to types or decls, not expressions.  In that case we >> should just be issuing an error. >> >> I could be convinced otherwise, so if you think we should support >> passing expressions to this builtin, make your case. > > The support is necessary in order to determine the attributes > in expressions such as: > >   struct S { __attribute__ ((packed)) int a[32]; }; > >   extern struct S s; > >   _Static_assert (__builtin_has_attribute (s.a, packed)); An example involving types might be a better one: typedef __attribute__ ((may_alias)) int* BadInt; void f (BadInt *p) { _Static_assert (__builtin_has_attribute (*p, may_alias)); } Martin