[PATCH] Fortran: different character lengths in array constructor [PR93289]

Jerry D jvdelisle2@gmail.com
Mon Feb 3 18:31:16 GMT 2025


On 2/3/25 2:49 AM, Richard Sandiford wrote:
> Steve Kargl <sgk@troutmask.apl.washington.edu> writes:
>> On Sat, Feb 01, 2025 at 09:49:17PM +0100, Harald Anlauf wrote:
>>> Am 01.02.25 um 21:03 schrieb Steve Kargl:
>>>> On Sat, Feb 01, 2025 at 07:25:51PM +0100, Harald Anlauf wrote:
>>>>>
>>>>> 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?
>>>>>
>>>>
>>>> My vote is 'no'.
>>>>
>>>> This is either a GNU extension or an error.  It is certainly
>>>> not a legacy issue as array constructors simple cannot appear
>>>> old moldy *legacy* codes.
>>>
>>> legacy /= moldy.
>>>
>>> My intention is to downgrade existing, potentially dangerous
>>> GNU extensions (like this one) carefully to "legacy", but not
>>> with an axe.
>>>
>>>> I would be in favor of making it a hard error.  If you believe
>>>> gfortan must be able to compile invalid source, then add an option
>>>> such as -fallow-invalid-scalar-character-entities-in-array-constructor.
>>>
>>> I don't see why we shall scare users by making code that is currently
>>> accepted silently, because it is a GNU extension, suddenly to a hard
>>> error.
>>>
>>> So why must we be so tough?
>>>
>>
>> Because -std=legacy allows a whole bunch of garbage.
>>
>> Instead of fixing broken code, a user will slap -std=legacy
>> in a Makefile and move on.  Then years from now, you'll see
>> -std=legacy in a whole bunch of Makefiles whether it is needed
>> or not.  See -maligned-double and -fallow-argument-mismatch as
>> poster children.
> 
> I agree that this is what will happen.  But for people running benchmarks,
> it's kind-of (kind-of) a feature.  Benchmarks tend to include relatively
> old code by the time that they're released, and benchmarks continue to be
> relevant (or at least widely tested) after they're out of maintenance.
> 
> So it has been really useful to have -std=legacy accept old, dangerous code,
> since it means that we can continue to test old benchmarks with newer
> compilers.  Improving the benchmark source to avoid the dangerous constructs
> would invalidate the test and make it harder to compare with historical
> results.
> 
>> Again, just my $0.02.
> 
> Same here, just wanted to raise the benchmark use case.
> 
> Thanks,
> Richard

I think we have had good discussion and for sake of the good of the 
order I recommend we push this for now.  The work has been done.

Regards,

Jerry


More information about the Fortran mailing list