From patchwork Sat Feb 1 18:25:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 105864 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4FA993858C42 for ; Sat, 1 Feb 2025 18:27:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4FA993858C42 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, secure) header.d=gmx.de header.i=anlauf@gmx.de header.a=rsa-sha256 header.s=s31663417 header.b=cxqwpym5 X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by sourceware.org (Postfix) with ESMTPS id 73F083858D39; Sat, 1 Feb 2025 18:25:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 73F083858D39 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 73F083858D39 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=212.227.17.22 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1738434357; cv=none; b=LPzo6Qe/iXmWovn+zPJjajOf7x/HD8KUcWFpRItDpH58YENv9Choj0kLxG49e4Vxfy+GJpm3LUsDNCKY+z+PJomL5s2BjtYOzPcWa+AZBErv6F4G/XbCQtWKjDJ8s8a9RiXMTwJkLjlccKPjXhuDdAt4JKefrjs+UFe0RlpP9rs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1738434357; c=relaxed/simple; bh=DXptk6MgolGVKwF5xiLIULczH1JmEv41rx6BrcmjINk=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=JZsM4I5bHVCH4u0OYkdzxb9pS3BR7lLi1I8iLCqEUgQrE0JFPbzWkhyR+NAFMNOkqbox7D+3EViq+qne0y2AyjOdpxas1UqGHDjnQcltxjxd1DTuackLy3hstAuII1Nyv/W/M8LJCyK9cHNawzky1mYr5R+K6MKzUsSVNkBw4jw= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 73F083858D39 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1738434355; x=1739039155; i=anlauf@gmx.de; bh=YYbaQdNBuqBvrDGRiD14QLrUHHA5OU2Vx5DR/0BiDSQ=; h=X-UI-Sender-Class:Content-Type:Message-ID:Date:MIME-Version:To: From:Subject:cc:content-transfer-encoding:content-type:date:from: message-id:mime-version:reply-to:subject:to; b=cxqwpym5VxsSZZWgJ9QvRiQ2O+PQyRUrlqWjeo4uupZlJtg+qg5uRqrzjJh9faTg Hu358NA+kzkH41mP4jVBTN5HHjesTvD6vYP9c9Nm+990nFM1N5FHy3DEqWOmglt9D 4HB/gaiAF4FYsOCyXZ9EwV+8j6SkNTRwpCYmpiMduAuGI8FjRZMwgL5+PWFWVPtHn ny/ddMjizGdNpjY97U7XxlACixJu0Tf5e6bJieGaKGvAt+gQp7Acwxn7pHb2Xdhez 8KTc1HS6iAwVqsBinCJSVW9Vk805MV5+o2mMrcl/U+/DAsDeJP4b85U9nnQN+48Cr zScXrSSrt+KZdEYktw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.178.29] ([79.232.148.253]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MryTF-1t8miE1DEb-00mXb4; Sat, 01 Feb 2025 19:25:55 +0100 Message-ID: Date: Sat, 1 Feb 2025 19:25:51 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Newsgroups: gmane.comp.gcc.fortran,gmane.comp.gcc.patches Content-Language: en-US To: fortran , gcc-patches From: Harald Anlauf Subject: [PATCH] Fortran: different character lengths in array constructor [PR93289] X-Provags-ID: V03:K1:khE2c2sU3PiIeDPIUgcZTjAtUmrJNV1Ps2j0uLjC5Q0fAGm60Y4 Q3W0Ett+/ExOsdENUZ2gz5JIWhEbcG39jyNPnjs4dBadZiAfcrY+/Bzbn70EMXSW63zz8oP 6u8CxWXUk8bTwGh8reOOzduQMBHx8uFL/NYEFgfFw2icPIBpQ8Rm1AYllpiEkiNaV+vqQmA xgO85O9Q3P6uR3eqrWjcw== UI-OutboundReport: notjunk:1;M01:P0:wu4cjju8/R4=;PCwDy2QqEs8As9QRhuq5n+Cl35A 8kQPxP6xW+925czD042Yk5/sCWSFWb6WkbBgR6q46sBo2YB0QU2wJycCiSC82N0/ijXqA2U/V 5FP8BLbegU5tap7ekFrNcc0xaYHZ/L88COXw0/b1Xgt8+YXih4Xonriz5tu58zYxRCZsp9gwf ZdVw4E9wAuqJscXqhomOETW2P6erkZ3GnfMJVaqS6NZ9+TV3/lEaEXc0KSBu02CNmfRhJGbD0 KICc2D49EzzaqKaXsqUHxZj0Rp1UiEVy18hse5DG+2GgdVGrIID5If8eEa4InnUME+VQ03Ubc YpbyF7JeIAOcOFXmstviLyx0LUu0a8uHG82v/dtFg0lT0GUiTcdk0flI5Bvl0JRA+Lm4oajbY LYWZa2FXYTv8ywrVQ6X+yMLNO0Z1iFiTLL8g60ZOJrPloBYWfkwHT5cRSMy/D0Mk7SDSOca/x 9AyZbaQa/h90QrKU8G8PeNOLRXnnXOqjH7guJLeiATeIO3n4N7eeCGU64rZOM7oabiX51j5io SKhxHRrV8A1Ev6moDqlUOt8lsdvHzo3xnH9Lg2yzqctKuxrbyQJYuf50shIE2Lqsn0xcVU6At njjOPhP9DKg9aJ6fk2QktkgQlvsan8agOQ6ScmDvfLMjC+puwrpWEmy2gNL1oGIIsLriO9Fa1 mFxmGmSSw8m3LurCk3gGRG5IAoecqipBNm+GyaZbidkAT3JSyoLwsymOB1TdPpNhB+CCPZi2V GokfVEgoPHU953dxrZ1za7iWJBfjlu3ysu49gbtPcGRwBJnN/Ho0Kt/R+OJj2lZk4WYfc/zym ZEtTFvJVRO0OJCWj9L6dWhbhmrPAorvXHe19jqqR6JS77MWhpE1MirjdF7U4ciBCSFLQPLe48 uMFm8bTpNAYl9e941cb5AcgUcPcDHbtqqmel6kepXG/oktADElgb4d6mKWZg7SXByAIvBMxZt LJxu0rmz5amJnRaz4yu7mEVSrzECsUoEXLfhyUqSg+lbQtWfqskPaFX6jI42RhjV+qM2Q/czO lHmtm+z4PlnxPPcyXGiHaF4UdtmLFmwmlhm+HRlygbGj31gApBV9tcMgRw3zWjR918V8UbOFk N7cXuKNdiTVgEdWU9aXm8Lhs75uYNS3EnFNJqQQ/H8oIy7j9uIzvA9e5VBzHKz2tdinSlGZ8M GWdQrNwOwjWpjgT8pS6HWIIiKlkjF40WBMnb2t3LCTSeAyomAAaEwWoitIoy5QYEtjf9qBSQb ZhREiRPVE/I/gzAdsg9WCPl8tj4mzDjzgn8rzqTDHfDUmn5CXPfLOJcMZ0l9BYFF4YN/iD9fV h7HmYpYiqYWOfW9B58EjUXMILDiFt38hwJ1U8BBmBMTN7U= X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org Dear all, the attached patch downgrades different constant character lengths in an array constructor from a GNU to a legacy extension, so that users get a warning with -std=gnu. We continue to generate an error when standard conformance is requested. Regtested on x86_64-pc-linux-gnu (found one testcase where this triggered... :) OK for mainline? Thanks, Harald From c2ab5fc3e4cc758ca00e1878394c8f1466462f84 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Sat, 1 Feb 2025 19:14:21 +0100 Subject: [PATCH] Fortran: different character lengths in array constructor [PR93289] PR fortran/93289 gcc/fortran/ChangeLog: * decl.cc (gfc_set_constant_character_len): Downgrade different string lengths in character array constructor to legacy extension. gcc/testsuite/ChangeLog: * gfortran.dg/unlimited_polymorphic_1.f03: Pad element in character array constructor to correct length. * gfortran.dg/char_array_constructor_5.f90: New test. --- gcc/fortran/decl.cc | 20 +++++++++++++------ .../gfortran.dg/char_array_constructor_5.f90 | 13 ++++++++++++ .../gfortran.dg/unlimited_polymorphic_1.f03 | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/char_array_constructor_5.f90 diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index 7954a845bc0..5a46658651a 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -1889,12 +1889,20 @@ gfc_set_constant_character_len (gfc_charlen_t len, gfc_expr *expr, /* Apply the standard by 'hand' otherwise it gets cleared for initializers. */ - if (check_len != -1 && slen != check_len - && !(gfc_option.allow_std & GFC_STD_GNU)) - gfc_error_now ("The CHARACTER elements of the array constructor " - "at %L must have the same length (%ld/%ld)", - &expr->where, (long) slen, - (long) check_len); + if (check_len != -1 && slen != check_len) + { + if (!(gfc_option.allow_std & GFC_STD_GNU)) + gfc_error_now ("The CHARACTER elements of the array constructor " + "at %L must have the same length (%ld/%ld)", + &expr->where, (long) slen, + (long) check_len); + else + gfc_notify_std (GFC_STD_LEGACY, + "The CHARACTER elements of the array constructor " + "at %L must have the same length (%ld/%ld)", + &expr->where, (long) slen, + (long) check_len); + } s[len] = '\0'; free (expr->value.character.string); diff --git a/gcc/testsuite/gfortran.dg/char_array_constructor_5.f90 b/gcc/testsuite/gfortran.dg/char_array_constructor_5.f90 new file mode 100644 index 00000000000..0cbe6b1468d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/char_array_constructor_5.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! { dg-additional-options "-std=gnu" } +! +! PR fortran/93289 +! +! Contributed by Tobias Burnus + +character(len=*), parameter :: str = "abj", str2 = "1234" +print *, [character(5) :: str, "ab", "hjf333"] +print *, [character(5) :: str, str2] +print *, [str, "ab", "hjf333"] ! { dg-warning "must have the same length" } +print *, [str, str2] ! { dg-warning "must have the same length" } +end diff --git a/gcc/testsuite/gfortran.dg/unlimited_polymorphic_1.f03 b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_1.f03 index 8634031ad81..51483ed0332 100644 --- a/gcc/testsuite/gfortran.dg/unlimited_polymorphic_1.f03 +++ b/gcc/testsuite/gfortran.dg/unlimited_polymorphic_1.f03 @@ -155,7 +155,7 @@ END MODULE call foo([a(8),a(9)], res) if (trim (res) .ne. "type(a) array 8 9") STOP 1 - call foo([sun, " & rain"], res) + call foo([sun, " & rain "], res) if (trim (res) .ne. "char( 8, 2)sunshine & rain") STOP 1 call foo([sun//" never happens", " & rain always happens"], res) -- 2.43.0