From patchwork Fri Jul 14 17:02:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Sidwell X-Patchwork-Id: 788644 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 3x8Jrz13cxz9s7m for ; Sat, 15 Jul 2017 03:02:26 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="xAzZnsEl"; 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 :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; q=dns; s=default; b=vXd3pHp8wXdO4rGgk jQNGm/kY9pqIFg+8k5iJwn81abzwrRfJXU/v3T26kMgyn2hOpEMbkeA2QVupPo8f qKYZP00nXQvfy9qPIU74GvraycBCqpM6+pUCNJYIKqosrPmIOJDrc0ENaMr9AJvW wZhJmIGpHapX+OofQ8r3l4g1Mk= 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 :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; s=default; bh=7qip1VJdo1DjyV3UXjLsz4J ziIk=; b=xAzZnsElYNVN5XjMS8OH4mKTL7IA+V2TpSRHzP5e3Kun00l7T4h+2jh yUBlVx9u07/ULcIckoTrNrWyIs9rJgtQCVy6/7f3VWh/YBA0oCg6N3O42Oqv/bjK QkNRM+xkWEMieV5JqgAXdCVUeKRp97m5z09ckhlMOfqOC3gYklpo= Received: (qmail 99314 invoked by alias); 14 Jul 2017 17:02:16 -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 99286 invoked by uid 89); 14 Jul 2017 17:02:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.4 required=5.0 tests=AWL, 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=objective X-HELO: mail-it0-f42.google.com Received: from mail-it0-f42.google.com (HELO mail-it0-f42.google.com) (209.85.214.42) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 14 Jul 2017 17:02:13 +0000 Received: by mail-it0-f42.google.com with SMTP id m68so24748489ith.1 for ; Fri, 14 Jul 2017 10:02:12 -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:references:cc:from:message-id :date:user-agent:mime-version:in-reply-to; bh=kgMZYq4w/UWFXNK1kQL6f0vNfoY9HqiU+s+cn8kc/E8=; b=V1tYGVhyBeuAk08ZNhijJmAyxM6M9whMcTQd5261S/m/31zXBFnv94LDs2JA2m0jAS quCsGHJHX5Bx4FuTHc6D1HOIJNhog886UgfqaJNq74QxEdIqeHq0Qs15r+nkgTSOgQc4 wN0p4828CxCT87ZUUc/r1H330SEyD3ik/7dMNlhzRbCDh33F3Qq5hbAj0ifCxO58+T78 s9qubiwwRak9jtYkRdEZrcHqDSpQrctqMO+YkrKkAmm9BTEBy2xMFyUtt5NhOqt4V3zO ASl6fmUTEDpfdc8fsSz6ZVRR3Ku01HlICIiygnVcrgRp+UxnXJMjzTYgDB/3DDps5453 Wd+w== X-Gm-Message-State: AIVw1124I9cmy1kIsGETEdGAhs6gSq/BFtSdUjKC6kMcNMPjUQJMderv /f6wwyI0leeOUQ== X-Received: by 10.36.17.69 with SMTP id 66mr4560830itf.9.1500051731382; Fri, 14 Jul 2017 10:02:11 -0700 (PDT) Received: from [100.64.209.104] (public-120-7.nat.utoronto.ca. [138.51.120.7]) by smtp.googlemail.com with ESMTPSA id a65sm4957767ioj.51.2017.07.14.10.02.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 14 Jul 2017 10:02:10 -0700 (PDT) Subject: Re: [PATCH] Kill TYPE_METHODS objc 8/9 To: GCC Patches References: <8377f2cd-577c-60b2-63ac-f2619ebe63aa@acm.org> Cc: Jason Merrill , Richard Guenther , Jim Wilson , Jan Hubicka From: Nathan Sidwell Message-ID: Date: Fri, 14 Jul 2017 13:02:10 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <8377f2cd-577c-60b2-63ac-f2619ebe63aa@acm.org> This bit of the objective C runtime already knows that TYPE_FIELDS might contain non-FIELD_DECL things. But it has the delightful assumption that the first thing is a FIELD_DECL, which apparently was fine until now. Fixed by simplifying the loop. nathan Index: gcc/objc/objc-runtime-shared-support.c =================================================================== --- gcc/objc/objc-runtime-shared-support.c (revision 250160) +++ gcc/objc/objc-runtime-shared-support.c (working copy) @@ -528,34 +528,32 @@ build_ivar_list_initializer (tree type, { vec *inits = NULL; - do - { - vec *ivar = NULL; - tree id; + for (; field_decl; field_decl = DECL_CHAIN (field_decl)) + if (TREE_CODE (field_decl) == FIELD_DECL) + { + vec *ivar = NULL; + tree id; - /* Set name. */ - if (DECL_NAME (field_decl)) - CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, - add_objc_string (DECL_NAME (field_decl), - meth_var_names)); - else - /* Unnamed bit-field ivar (yuck). */ - CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, build_int_cst (NULL_TREE, 0)); + /* Set name. */ + if (DECL_NAME (field_decl)) + CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, + add_objc_string (DECL_NAME (field_decl), + meth_var_names)); + else + /* Unnamed bit-field ivar (yuck). */ + CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, + build_int_cst (NULL_TREE, 0)); - /* Set type. */ - id = add_objc_string (encode_field_decl (field_decl), - meth_var_types); - CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, id); + /* Set type. */ + id = add_objc_string (encode_field_decl (field_decl), + meth_var_types); + CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, id); - /* Set offset. */ - CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, byte_position (field_decl)); - CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, - objc_build_constructor (type, ivar)); - do - field_decl = DECL_CHAIN (field_decl); - while (field_decl && TREE_CODE (field_decl) != FIELD_DECL); + /* Set offset. */ + CONSTRUCTOR_APPEND_ELT (ivar, NULL_TREE, byte_position (field_decl)); + CONSTRUCTOR_APPEND_ELT (inits, NULL_TREE, + objc_build_constructor (type, ivar)); } - while (field_decl); return objc_build_constructor (build_array_type (type, 0), inits); }