Harald,
Sorry about delayed response. Got side-tracked by Family this weekend.
On Sun, Nov 19, 2023 at 09:46:46PM +0100, Harald Anlauf wrote:
>
> On 11/19/23 01:04, Steve Kargl wrote:
> > On Sat, Nov 18, 2023 at 11:12:55PM +0100, Harald Anlauf wrote:
> > > Regtested on x86_64-pc-linux-gnu. OK for mainline?
> > >
> >
> > Not in its current form.
> >
> > > {
> > > + int first_int_kind = -1;
> > > + bool f2023 = ((gfc_option.allow_std & GFC_STD_F2023) != 0
> > > + && (gfc_option.allow_std & GFC_STD_GNU) == 0);
> > > +
> >
> > If you use the gfc_notify_std(), then you should not need the
> > above check on GFC_STD_GNU as it should include GFC_STD_F2023.
>
> this is actually the question (and problem). For all new features,
> -std=gnu shall include everything allowed by -std=f2023.
Yes.
> Here we have the problem that the testcase is valid F2018 and is
> silently accepted by gfortran-13 for -std=gnu and -std=f2018.
F2023 is the Fortran standard and supercedes previous Fortran standards.
If there is a conflict between the standing standard and an old standard,
then the standing standard should take precedence unless one specifically
uses, for example, -std=f2018.
After 20+ years of contributing to gfortran, I've come to believe
that the default -std= should be the current standard, and -std=gnu
should be deprecated. All GNU extensions should require an option
to active. For example,
write(*,*), 'hello'
end
gfortran12 -o z a.f90
a.f90:1:10:
1 | write(*,*), 'hello'
| 1
Warning: Legacy Extension: Comma before i/o item list at (1)
This should be an error unless the -fallow-write-stmt-comma is used.
The option would simply degrade the error to a warning. Why, you ask?
To encourage people to write standard conforming code. Unfortunately,
that horse has left the barn.
> I prefer to keep it that way also for gfortran-14, and apply the
> new restrictions only for -std=f2023. Do we agree on this?
If gfortran wants to maintain the status quo for 14, then
it should probably remove the -std=f2023 patch and wait for
the branch to 15.
> Now that should happen for -std=gnu -pedantic (-w)?
-pedantic is not a very effective option and should be ignored.
> I have thought some more and came up with the revised attached
> patch, which still has the above condition. It now marks the
> diagnostics as GNU extensions beyond F2023 for -std=f2023.
>
> The mask f2023 in the above form suppresses new warnings even
> for -pedantic; one would normally use -w to suppress them.
>
> Now if you remove the second part of the condition, we will
> regress on testcases system_clock_1.f90 and system_clock_3.f90
> because they would emit GNU extension warnings because the
> testsuite runs with -pedantic.
It seems that the solution is to fix the code in the testsuite.
With -std=f2023 or -std=gnu, the code should error. With
-std=f2018 (or older?), the code should compile.
It's been too long for my memory, doesn't the use of
'{ dg-options "-std=f023" }' supercede the set of predefined options
such as -pedantic?
> The options I see:
>
> - use patch-V1 (although diagnostics are better in V2),
>
> - use patch-V2,
>
> - use patch-V2, but enable -pedantic warnings for previously
> valid code, and adjust the failing testcases
I suppose that this last one is the best option.
>
> - ???
>
> > Elsewhere in the FE, gfortran uses gfc_notify_std() to enforce
> > requirements of a Fortran standard. The above would be
> >
> > if (count->ts.kind < gfc_default_integer_kind
> > && gfc_notify_std (GFC_STD_F2023, "COUNT argument to
> > SYSTEM_CLOCK "
> > "at %L must have kind of at least default
> > integer",
> > &count->where))
>
> I tried this first, and it did not do the job.
>
> The logic in gfc_notify_std is:
>
> estd = std & ~gfc_option.allow_std; /* Standard to error about. */
> error = (estd != 0);
> if (error)
> msg = notify_std_msg (estd);
> ...
>
> So for -std=f2023 we get estd=0, error=false, and *NO* error.
> For -std=f2018 we get error=true and an error message.
> This is the opposite of what is needed.
>
> Can you please try yourself?
>
I was afraid you were going to say this. :-) :-)
The holidays draw near. I can probably find the time to
poke at gfortran.
> > Note, gfc_notify_std() should add the 'Fortran 2023: ' string,
> > if not, that should be fixed.
>
> This I did fix.
Thanks.
> > Of course, I seldom provide patches if others don't have a comment
> > then do as you like.
>
> Thanks for your feedback!
No, thank you for continuing to peck away at gfortran issue.
--
steve