From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 124927 invoked by alias); 6 Feb 2020 20:01:56 -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 124863 invoked by uid 89); 6 Feb 2020 20:01:56 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 spammy= X-HELO: us-smtp-delivery-1.mimecast.com Received: from us-smtp-1.mimecast.com (HELO us-smtp-delivery-1.mimecast.com) (205.139.110.61) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 06 Feb 2020 20:01:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581019313; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MiQKOWQQyJFB6WestCaY2MJR4OwpkOnbwnc/cF0FArg=; b=XfQ9Seb4Q5RyeDDgqCf9QmlyL5obZiJZVIEzJdww7ln+qKq7awQFhfI6iiEB4HdGlQZ5Wm 4L5zRvzNw/ac3B7S1RPmU2BqMRk34gT/KFaQyXB4JXRUPGgIHuDPp4BGoesJ3+BuvYT9Er 5xm9Eo3cuZNx/HsXhgB15kVMl92iDKM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-246-47c2lR1dP8iBgX5CNQitIw-1; Thu, 06 Feb 2020 15:01:49 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 65430DB2E; Thu, 6 Feb 2020 20:01:48 +0000 (UTC) Received: from t470.redhat.com (ovpn-116-56.phx2.redhat.com [10.3.116.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id E045610001B3; Thu, 6 Feb 2020 20:01:47 +0000 (UTC) From: David Malcolm To: gcc-patches@gcc.gnu.org, fortran@gcc.gnu.org Cc: David Malcolm Subject: [PATCH 2/2] analyzer: fix ICE with fortran constant arguments (PR 93405) Date: Thu, 06 Feb 2020 20:01:00 -0000 Message-Id: <20200206200144.14304-2-dmalcolm@redhat.com> In-Reply-To: <20200206200144.14304-1-dmalcolm@redhat.com> References: <20200206200144.14304-1-dmalcolm@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00394.txt.bz2 PR analyzer/93405 reports an ICE with -fanalyzer when passing a constant "by reference" in gfortran. The issue is that the constant is passed as an ADDR_EXPR of a CONST_DECL, and region_model::get_lvalue_1 doesn't know how to handle CONST_DECL. This patch implements it for CONST_DECL by providing a placeholder region, holding the CONST_DECL's value, fixing the ICE. Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. Is the Fortran testcase OK for master? (this relies on patch 1 in the kit, obviously) gcc/analyzer/ChangeLog: PR analyzer/93405 * region-model.cc (region_model::get_lvalue_1): Implement CONST_DECL. gcc/testsuite/ChangeLog: PR analyzer/93405 * gfortran.dg/analyzer/pr93405.f90: New test. --- gcc/analyzer/region-model.cc | 13 +++++++++++++ gcc/testsuite/gfortran.dg/analyzer/pr93405.f90 | 14 ++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/analyzer/pr93405.f90 diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 8b57a623084..61390aa4cd1 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -4717,6 +4717,19 @@ region_model::get_lvalue_1 (path_var pv, region_mode= l_context *ctxt) } break; =20 + case CONST_DECL: + { + tree cst_type =3D TREE_TYPE (expr); + region_id cst_rid =3D add_region_for_type (m_root_rid, cst_type); + if (tree value =3D DECL_INITIAL (expr)) + { + svalue_id sid =3D get_rvalue (value, ctxt); + get_region (cst_rid)->set_value (*this, cst_rid, sid, ctxt); + } + return cst_rid; + } + break; + case STRING_CST: { tree cst_type =3D TREE_TYPE (expr); diff --git a/gcc/testsuite/gfortran.dg/analyzer/pr93405.f90 b/gcc/testsuite= /gfortran.dg/analyzer/pr93405.f90 new file mode 100644 index 00000000000..e2c23753015 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/analyzer/pr93405.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +real a(10), b(10), c(10) +a =3D 0. +b =3D 1. +call sum(a, b, c, 10) +print *, c(5) +end +subroutine sum(a, b, c, n) +integer i, n +real a(n), b(n), c(n) +do i =3D 1, n + c(i) =3D a(i) + b(i) +enddo +end --=20 2.21.0