Janus Weil wrote:
here is a small patch which does two things: 1) It fixes the ICE in the subject line (in a rather obvious way). 2) It warns about alternate-return arguments (which is an obsolescent feature), and adds -std=legacy to some test cases to suppress the warning.
I would prefer if you could use "-std=gnu", I find -std=legacy is too special. Alternate-returns are perfectly valid in Fortran 2008 - the standard just requires the obsolescent warning, which -std=f95/f2003/f2008/f2008ts activate. And by default "-pedantic". Using "" or "-std=gnu" should be sufficient to disable "-pedantic".
Regarding the second point, one should mention that we already have a warning for "alternate return", but this only triggers if there is an actual RETURN statement (which is not the case for the test code in the PR). The warning I'm adding triggers on the appearance of an asterisk argument.
Shouldn't one then remove the other warning, which should be then unreachable? If so, please do so.
This induces a certain redundancy, i.e. we warn about both the alternate-return argument and the alternate RETURN statement. The question is if we want to keep this, or whether on can remove the old warning for the RETURN statement (which could be done in a follow-up patch).
Or it is not unreachable but leads to double-diagnostic which is not better, either.
The patch is regtested on x86_64-unknown-linux-gnu. Ok for trunk?
OK with the -std= change. (Please run "make RUNTESTFLAGS="dg.exp=.<name>.f90" prior committal to check whether it indeed works with -std=gnu.)
Thanks for the patch! Tobias PS: Don't forget to copy the commit message to Bugzilla - thanks!
2013-04-01 Janus Weil <ja...@gcc.gnu.org> PR fortran/56284 PR fortran/40881 * decl.c (gfc_match_formal_arglist): Warn about alternate-return arguments. * interface.c (check_dummy_characteristics): Return if symbols are NULL. 2013-04-01 Janus Weil <ja...@gcc.gnu.org> PR fortran/56284 PR fortran/40881 * gfortran.dg/altreturn_8.f90: New. * gfortran.dg/altreturn_2.f90: Add -std=legacy. * gfortran.dg/intrinsic_actual_3.f90: Ditto. * gfortran.dg/invalid_interface_assignment.f90: Ditto.