From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 116317 invoked by alias); 2 Sep 2016 20:53:16 -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 116298 invoked by uid 89); 2 Sep 2016 20:53:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=kirill.yukhin@gmail.com, kirillyukhingmailcom, dereferences X-HELO: mail-pf0-f195.google.com Received: from mail-pf0-f195.google.com (HELO mail-pf0-f195.google.com) (209.85.192.195) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 02 Sep 2016 20:53:13 +0000 Received: by mail-pf0-f195.google.com with SMTP id i6so6198825pfe.0 for ; Fri, 02 Sep 2016 13:53:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-transfer-encoding; bh=TAdyrtr+JU1ZQtRn04qm9UK/XsHDxK7DXEn9MdSs+jE=; b=AUAGjB/cufrP9IRLC7b2EPLMomTb4/J90+xIgr6cZdSVeWWBKO1DupfjPhkrjopWPe OuwcmZepjsZ5dWj3rX7YzycoXXaRT1J8AVIp6iEUSGwvRfmKSriCoJjDe5BKMmeoJ2re WFBMiDPJ9iVF8sh/nT+MNkws1jbBRj7+sMMMXL9YXmtN3T7YBTTVh6bhOa7rdNa+Hp71 MHO2W1PeC2CR7s1ZRk4LhWBcWCDFARtJSrXGQNrnWYvsOsCgJmxNyY2T+ZciYpPo8LYw +HPu64nSIHLTAk3Erp859XxA10VLRUdhZ5cHPutj00XRXjbI0+HTd/8a4Gxd2Ck/2wJB DY7w== X-Gm-Message-State: AE9vXwN3RZAO9SvNc0PiDI4376WB1yLr1SG1KrE19jA/QP63yJ0uEwCf08AzrmaDHoo+tA== X-Received: by 10.98.152.6 with SMTP id q6mr39739903pfd.86.1472849591767; Fri, 02 Sep 2016 13:53:11 -0700 (PDT) Received: from [192.168.0.238] (95-26-220-202.broadband.corbina.ru. [95.26.220.202]) by smtp.gmail.com with ESMTPSA id b134sm16834417pfb.55.2016.09.02.13.53.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 02 Sep 2016 13:53:10 -0700 (PDT) To: gcc-patches@gcc.gnu.org, hubicka@ucw.cz From: Kirill Yukhin Subject: [PATCH, IPA] Check pointer for 0 before use in `get_odr_type` Message-ID: <394ceee5-dfc2-f9a7-c534-7a09f222c2ab@gmail.com> Date: Fri, 02 Sep 2016 20:54:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-09/txt/msg00129.txt.bz2 Hello, Looks like `get_odr_type ()` contains code which dereferences pointer before check it for zero. I moved the line under the check. Bootstrap/regtest on x?86|x86_64 in progress. Is it ok for trunk if pass? gcc/ * gcc/ipa-devirt.c (get_odr_type): Check odr_types_ptr for zero before dereferencing it. -- Thanks, K commit 9b822dfb4db14ce762a8d55cf76c677f3fae04bc Author: Kirill Yukhin Date: Fri Sep 2 23:40:55 2016 +0300 Access odr_type only if odr_type_ptr is not 0. diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index 2cf018b..cca912c 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -2132,12 +2132,14 @@ get_odr_type (tree type, bool insert) } else if (base_id > val->id) { - odr_types[val->id] = 0; /* Be sure we did not recorded any derived types; these may need renumbering too. */ gcc_assert (val->derived_types.length() == 0); if (odr_types_ptr) - val->id = odr_types.length (); + { + odr_types[val->id] = 0; + val->id = odr_types.length (); + } vec_safe_push (odr_types_ptr, val); } return val;