From patchwork Wed Nov 30 05:13:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Punnoose, Elizebeth" X-Patchwork-Id: 700850 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 3tT7qq233Sz9t1T for ; Wed, 30 Nov 2016 16:13:57 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="HyeABdkg"; 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:from :to:subject:date:message-id:content-type :content-transfer-encoding:mime-version; q=dns; s=default; b=gdt qCvMxbLzKcVYZjVV3DJujA6DclgasQm7ZTKnfGDirZ82YXTAIXUxiNi70aH4x/qr e1fY1QR3npEY40y8ODxhjPJWAnktFClV/4NRfQmGo/sxiIgiQjCoGz5p9UIz1e3R 5Ob+l2kOTjBnvP0zZ73BAiV3AFchwFHndFVtJa6g= 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:from :to:subject:date:message-id:content-type :content-transfer-encoding:mime-version; s=default; bh=agegbtLyZ vT73zM90VdDzE3NUYM=; b=HyeABdkgncux6+2C8K7iBLlp/nt8svpXCjvP6Mo9y SSKeoJLSnYUR/QvxDZbspbhwUQfDl6gPQtcmXiz3bHde2mZrTgJn+3lHRzYHucIh 8S7vAn0hIZ6A2YOD3WoVC9uw8/kBwAwLHVSGs+E+ZJmKRRg2i5vzdEeVg/sssquF hU= Received: (qmail 115290 invoked by alias); 30 Nov 2016 05:13:47 -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 115215 invoked by uid 89); 30 Nov 2016 05:13:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=2.9 required=5.0 tests=AWL, BAYES_50, KAM_ASCII_DIVIDERS, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=no version=3.3.2 spammy=H*M:COM, H*MI:COM, H*M:PROD, H*M:OUTLOOK X-Spam-User: qpsmtpd, 2 recipients X-HELO: NAM01-BN3-obe.outbound.protection.outlook.com Received: from mail-bn3nam01on0101.outbound.protection.outlook.com (HELO NAM01-BN3-obe.outbound.protection.outlook.com) (104.47.33.101) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 Nov 2016 05:13:31 +0000 Received: from CS1PR84MB0054.NAMPRD84.PROD.OUTLOOK.COM (10.162.189.148) by CS1PR84MB0054.NAMPRD84.PROD.OUTLOOK.COM (10.162.189.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.13; Wed, 30 Nov 2016 05:13:28 +0000 Received: from CS1PR84MB0054.NAMPRD84.PROD.OUTLOOK.COM ([10.162.189.148]) by CS1PR84MB0054.NAMPRD84.PROD.OUTLOOK.COM ([10.162.189.148]) with mapi id 15.01.0747.015; Wed, 30 Nov 2016 05:13:28 +0000 From: "Punnoose, Elizebeth" To: "fortran@gcc.gnu.org" , "gcc-patches@gcc.gnu.org" Subject: RE: [PATCH] PR fortran/77505 -- Treat negative character length as LEN=0 Date: Wed, 30 Nov 2016 05:13:28 +0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=elizebeth.punnoose@hpe.com; x-ms-office365-filtering-correlation-id: f3dc00a3-949f-4fa4-2b9e-08d418df9e93 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CS1PR84MB0054; x-microsoft-exchange-diagnostics: 1; CS1PR84MB0054; 7:6NKxAWpZK+iBsjA13sy2WYIQ0nNl2luUKtSiUONGXFS9IGMI52sLw9RV/XXppCB/ASR1AvOQ7mSTFf+cGUJLNy/w9WAOf+LzgCqjwAcoFppGFHyr5dW6D1v04VmFVOyB4biAvX6tKaB5hJA5umF/kt4AKOFpHbf4tNZyDt5vl7uxcG+5zqvgWyKu0gjQ4//YRv66dlTBGDam3oGhgbq5KNOTh+dZHDe2XXhCsL96Lad9DQ4TXZwH0nMXMlbOsN8DvqQoX2HP8PVA/MebpIndc8OMGTgftsDcoVO3SBeqsmwv+iaj1qqOg1qjF4mN3naD7vXlFlDBysfCfdL+66k17RjHe+yETelmb9OL+UkMSz3yLCcrF5Rz/VZ2pHdjM1X4xJNaAaBwasgjmp+RGOw6feZ+FNAYKiqvM7laEN6x3UqIA5hlwktNURyEjS7+i4yHGwD/jCTkLkAQAx+mkhKjNw== x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(227479698468861)(22074186197030)(183786458502308); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123555025)(20161123562025)(20161123564025)(20161123560025)(6072148); SRVR:CS1PR84MB0054; BCL:0; PCL:0; RULEID:; SRVR:CS1PR84MB0054; x-forefront-prvs: 0142F22657 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(6009001)(7916002)(189002)(54534003)(199003)(377424004)(5660300001)(33656002)(92566002)(2900100001)(2501003)(99286002)(105586002)(81156014)(8676002)(8936002)(6116002)(3846002)(68736007)(81166006)(102836003)(74316002)(305945005)(9686002)(7736002)(39410400001)(38730400001)(6506003)(39450400002)(106356001)(7846002)(66066001)(77096006)(4001150100001)(107886002)(2906002)(97736004)(5001770100001)(3660700001)(3280700002)(229853002)(101416001)(54356999)(50986999)(189998001)(122556002)(86362001)(450100001)(7696004); DIR:OUT; SFP:1102; SCL:1; SRVR:CS1PR84MB0054; H:CS1PR84MB0054.NAMPRD84.PROD.OUTLOOK.COM; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: hpe.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2016 05:13:28.1619 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR84MB0054 X-IsSubscribed: yes Please excuse the messy formatting in my initial mail. Resending with proper formatting. This patch checks for negative character length in the array constructor, and treats it as LEN=0. A warning message is also printed if bounds checking is enabled. Bootstrapped and regression tested the patch on x86_64-linux-gnu and aarch64-linux-gnu. Thanks, Elizebeth Index: ChangeLog =================================================================== --- ChangeLog (revision 242906) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2016-11-30 Elizebeth Punnoose + + PR fortran/77505 + * trans-array.c (trans_array_constructor): Treat negative character + length as LEN=0. + 2016-11-27 Paul Thomas PR fortran/78474 Index: trans-array.c =================================================================== --- trans-array.c (revision 242906) +++ trans-array.c (working copy) @@ -2226,6 +2226,8 @@ trans_array_constructor (gfc_ss * ss, lo gfc_ss_info *ss_info; gfc_expr *expr; gfc_ss *s; + tree neg_len; + char *msg; /* Save the old values for nested checking. */ old_first_len = first_len; @@ -2271,6 +2273,28 @@ trans_array_constructor (gfc_ss * ss, lo gfc_conv_expr_type (&length_se, expr->ts.u.cl->length, gfc_charlen_type_node); ss_info->string_length = length_se.expr; + + /* Check if the character length is negative, + if so consider it as LEN=0. */ + neg_len = fold_build2_loc (input_location, LT_EXPR, + boolean_type_node, ss_info->string_length, + build_int_cst (gfc_charlen_type_node, 0)); + /* Print a warning if bounds checking is enabled. */ + if (gfc_option.rtcheck & GFC_RTCHECK_BOUNDS) + { + msg = xasprintf ("Negative character length will be treated" + " as LEN=0"); + gfc_trans_runtime_check (false, true, neg_len, &length_se.pre, + where, msg); + free (msg); + } + ss_info->string_length = fold_build3_loc (input_location, COND_EXPR, + gfc_charlen_type_node, neg_len, + build_int_cst (gfc_charlen_type_node, 0), + ss_info->string_length); + ss_info->string_length = gfc_evaluate_now (ss_info->string_length, + &length_se.pre); + gfc_add_block_to_block (&outer_loop->pre, &length_se.pre); gfc_add_block_to_block (&outer_loop->post, &length_se.post); } Index: ChangeLog =================================================================== --- ChangeLog (revision 242906) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2016-11-30 Elizebeth Punnoose + + PR fortran/77505 + * gfortran.dg/pr77505_1.f90: New test. + * gfortran.dg/pr77505_2.f90: New test. + 2016-11-27 Paul Thomas PR fortran/78474 Index: pr77505_1.f90 =================================================================== --- pr77505_1.f90             (nonexistent) +++ pr77505_1.f90          (working copy) @@ -0,0 +1,13 @@ +! { dg-do run } +program rabbithole +implicit none +character(len=:),allocatable    :: text_block(:) integer                         +:: i integer                         :: ii +character(len=10)               :: cten='abcdefghij' +character(len=20)               :: ctwenty='abcdefghijabcdefghij' +ii=-6 +text_block=[ character(len=ii) :: cten, ctwenty ] write(*,*)'WRITE IT' +write(*,'(a)')(trim(text_block(i)),i=1,size(text_block)) +end program rabbithole Index: pr77505_2.f90 =================================================================== --- pr77505_2.f90             (nonexistent) +++ pr77505_2.f90          (working copy) @@ -0,0 +1,14 @@ +! { dg-options "-fcheck=bounds" } +! { dg-do run } +program rabbithole +implicit none +character(len=:),allocatable    :: text_block(:) +integer                         :: i +integer                         :: ii +character(len=10)               :: cten='abcdefghij' +character(len=20)               :: ctwenty='abcdefghijabcdefghij' +ii=-6 +text_block=[ character(len=ii) :: cten, ctwenty ] +write(*,*)'WRITE IT' +write(*,'(a)')(trim(text_block(i)),i=1,size(text_block)) +end program rabbithole