From patchwork Wed Mar 6 18:49:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Koenig X-Patchwork-Id: 1052472 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-497471-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=netcologne.de Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="PXSk5yxE"; dkim=pass (2048-bit key; unprotected) header.d=netcologne.de header.i=@netcologne.de header.b="HbvzoboU"; dkim-atps=neutral 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 44F2rc6nR0z9s9y for ; Thu, 7 Mar 2019 05:50:23 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=HUPtnOBgME27JROJ32JNJ46uD1Z3y4FuenWPf9XYEzir3s+3d+ c+aBFMvwNUsBdRE+DPO/sPZLUpvKNE5wIe/SCSx3JZ3AkqhgFsS/XCg4qFflzCec jhjX3YMQfD6/+6kONLSseeosRd7Bqvm4dBsa4F0hzmcq+qVKhUkIUqRs4= 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 :from:subject:message-id:date:mime-version:content-type; s= default; bh=A8qgRU8JqeBmUUE2/O14iHFuXfo=; b=PXSk5yxEgFsK94lHKvv6 tod3bacv9vBpKcfL3z6lqInQ8kf9XBiRNHLNzsesSfh9edqFpcfTggVR/sLNxPcZ VF+y03zcOhtRGGsSKPx3TKCNKQoIbEdhZDxitrzr8nZUbi0hM59Qfpcc3ZvPEeXl I2tWyrAEuHEy2kuoenhpOfQ= Received: (qmail 72929 invoked by alias); 6 Mar 2019 18:50:15 -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 72913 invoked by uid 89); 6 Mar 2019 18:50:14 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-9.9 required=5.0 tests=BAYES_00, DNS_FROM_AHBL_RHSBL, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_PASS, TIME_LIMIT_EXCEEDED, T_RP_MATCHES_RCVD autolearn=unavailable version=3.3.1 spammy=tkoenig@gcc.gnu.org, tkoeniggccgnuorg, gfc_expr, wrongcode X-HELO: cc-smtpout3.netcologne.de Received: from cc-smtpout3.netcologne.de (HELO cc-smtpout3.netcologne.de) (89.1.8.213) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 06 Mar 2019 18:50:04 +0000 Received: from cc-smtpin2.netcologne.de (cc-smtpin2.netcologne.de [89.1.8.202]) by cc-smtpout3.netcologne.de (Postfix) with ESMTP id 634D6125A7; Wed, 6 Mar 2019 19:50:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=netcologne.de; s=nc1116a; t=1551898201; bh=6wooSEV61XglM1djZDBQpjhUrTfEFpnYGRP9W6f/L8Y=; h=To:From:Subject:Message-ID:Date:From; b=HbvzoboUQ/i//iXcQ7SdW0GrVIQ0Tg9ufEYbtEdE4RAV3JdqCdLbHJL8vblnAAbOu VPoCY7UIXDGq3IwnU/OMo5xxFyLkTE9FveYw8LjceprhEdTlhKatYj4kThicRz3UIU CC7w+jd4Hrsghwz37Le5EMoVyPEO2lROV5Q7gZ8R0GW+ouxm8BZCl+QZh6tz54zj1x Sx2HxuK9rrzaqNbMacVKAwuJCj37gSWXFPZpZyWJ1hgv1i3tuXrkdaOr2GXO9brAp/ R4FLpXZOhQECnBHy8F3u0hYxrteFfTmtTSxzs1Sra8EPuoJqahBHwVSxlreaKeLAGP CeSvF6FLco86Q== Received: from localhost (localhost [127.0.0.1]) by cc-smtpin2.netcologne.de (Postfix) with ESMTP id 5351B11DBB; Wed, 6 Mar 2019 19:50:01 +0100 (CET) Received: from [2001:4dd7:fd2:0:7285:c2ff:fe6c:992d] (helo=cc-smtpin2.netcologne.de) by localhost with ESMTP (eXpurgate 4.6.0) (envelope-from ) id 5c801659-01b0-7f0000012729-7f0000019b84-1 for ; Wed, 06 Mar 2019 19:50:01 +0100 Received: from [IPv6:2001:4dd7:fd2:0:7285:c2ff:fe6c:992d] (2001-4dd7-fd2-0-7285-c2ff-fe6c-992d.ipv6dyn.netcologne.de [IPv6:2001:4dd7:fd2:0:7285:c2ff:fe6c:992d]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by cc-smtpin2.netcologne.de (Postfix) with ESMTPSA; Wed, 6 Mar 2019 19:49:59 +0100 (CET) To: "fortran@gcc.gnu.org" , gcc-patches From: Thomas Koenig Subject: [patch, fortran] Fix PR 66089, ICE (plus wrong code) in dependency handling Message-ID: <8e8f288d-a700-53c4-d1f6-cdea549374d0@netcologne.de> Date: Wed, 6 Mar 2019 19:49:59 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 Hello world, the attached patch fixes a 7/8/9 regression where dependency checking was for class arrays and a scalar value was mishandled when the dependency happened in an elemental function. There was an ICE for the test case which is handled by fixing up the class refs in gfc_walk_variable_expr. Once this was gone, a wrong-code issue appeared which was fixed by the part in gfc_scalar_elemental_arg_saved_as_reference (is that the longest function name in gfortran?). Regression-tested. OK for all affected branches? Regards Thomas 2019-03-06 Thomas Koenig PR fortran/66089 * trans-array.c (gfc_scalar_elemental_arg_saved_as_reference): Return false if a scalar tempoary is needed. (gfc_walk_variable_expr): Fix up class refs. 2019-03-06 Thomas Koenig PR fortran/66089 * gfortran.dg/dependency_53.f90: New test. Index: trans-array.c =================================================================== --- trans-array.c (Revision 269260) +++ trans-array.c (Arbeitskopie) @@ -2699,6 +2699,9 @@ gfc_scalar_elemental_arg_saved_as_reference (gfc_s if (ss_info->type != GFC_SS_REFERENCE) return false; + if (ss_info->data.scalar.needs_temporary) + return false; + /* If the actual argument can be absent (in other words, it can be a NULL reference), don't try to evaluate it; pass instead the reference directly. */ @@ -10515,6 +10518,8 @@ gfc_walk_variable_expr (gfc_ss * ss, gfc_expr * ex { gfc_ref *ref; + gfc_fix_class_refs (expr); + for (ref = expr->ref; ref; ref = ref->next) if (ref->type == REF_ARRAY && ref->u.ar.type != AR_ELEMENT) break;