https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108369
--- Comment #4 from Steve Kargl <sgk at troutmask dot apl.washington.edu> --- On Wed, Jan 11, 2023 at 09:50:37PM +0000, kargl at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108369 > > --- Comment #3 from kargl at gcc dot gnu.org --- > (In reply to anlauf from comment #1) > > (In reply to Ben Brewer from comment #0) > > Workaround: either use -std=legacy or fix the above argument declaration to: > > > > CHARACTER C1D001(*)*8,CVD001*8 > > While the workaround will work, it does so because it disables > -fallow-argument-mismatch. But, that feature emitting a bogus > error/warning. > > Note the following all compile and execute. TKR is satisfied > as I discussion in comment #2. > After looking into this a bit closer, Harald is indeed correct with the need for -std=legacy (or -fallow-argument-mismatch). In the line CALL SN512(C1N001(5)(2:9),CVCOMP) 'C1N001(5)(2:9)' is a substring of the array element 'C1N001(5)', which is a scalar (ie., rank = 0). The interface for SN512 is SUBROUTINE SN512(C1D001,CVD001) CHARACTER C1D001(6)*8,CVD001*8 The first dummy argument is a rank 1 array. Now, if the test is changed to pass an array section such as CALL SN512(C1N001(4:5)(2:9),CVCOMP) then gfortran gives % gfcx -w -c fm509.f fm509.f:378:17: 378 | CALL SN512(C1N001(4:5)(2:9),CVCOMP) 03770509 | 1 Error: Actual argument contains too few elements for dummy argument 'c1d001' (16/48) at (1) which I believe may be wrong.