https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85088
--- Comment #2 from janus at gcc dot gnu.org --- This issue might actually be related to a TODO note in decl.c, which could be removed like this: Index: gcc/fortran/decl.c =================================================================== --- gcc/fortran/decl.c (revision 258757) +++ gcc/fortran/decl.c (working copy) @@ -4791,13 +4791,7 @@ match_attr_spec (void) if (match_string_p ("nt")) { /* Matched "intent". */ - /* TODO: Call match_intent_spec from here. */ - if (gfc_match (" ( in out )") == MATCH_YES) - d = DECL_INOUT; - else if (gfc_match (" ( in )") == MATCH_YES) - d = DECL_IN; - else if (gfc_match (" ( out )") == MATCH_YES) - d = DECL_OUT; + d = match_intent_spec (); } } else if (ch == 'r') With this modification I get: intent.f90:2:18: integer, intent(int) :: x 1 Error: Bad INTENT specification at (1) intent.f90:4:11: integer, inten :: z 1 Error: Invalid character in name at (1) So, the first case is better now, the second is (wrongly) accepted and the third is unchanged. TODO: 1) reject the second case 2) check for regressions 3) find out why the TODO is there in the first place (I guess there's a reason why this simple replacement has not been done already? Probably due to item #1?)