diff -c ftnchek-3.3.1/forlex.c ftnchek-3.3.1-1/forlex.c *** ftnchek-3.3.1/forlex.c 2004-12-31 12:22:16.000000000 -0500 --- ftnchek-3.3.1-1/forlex.c 2006-06-25 12:59:02.000000000 -0400 *************** *** 755,760 **** --- 755,766 ---- } break; + /* Next case can only occur in illegal code */ + case 'H': + syntax_error(token->line_num,token->col_num, + "H specifier missing preceding number"); + break; + default: if(f77_format_extensions || f90_format_extensions) { nonstandard(token->line_num,token->col_num,f90_format_extensions,0); *************** *** 1553,1558 **** --- 1559,1575 ---- advance(); src_text_buf[src_text_len++] = curr_char; } + /* Catch closing > of variable format here so it taken as + delimiter not f90 relops. Note that inside_format is + turned off while scanning the expr inside < > so we use + curr_stmt_class instead to detect this case. Assumes that + a > as relop cannot occur in var fmt expr. This could be + made sure by checking if outside of parens. + */ + else if( curr_char == '>' && curr_stmt_class == tok_FORMAT ) { + get_simple_punctuation(token); + return; + } /* recognize F90 rel-ops here */ else if( f90_relop(token,&multichar) ) { token->tclass = tok_relop; diff -c ftnchek-3.3.1/fortran.y ftnchek-3.3.1-1/fortran.y *** ftnchek-3.3.1/fortran.y 2004-11-17 21:06:04.000000000 -0500 --- ftnchek-3.3.1-1/fortran.y 2006-06-25 13:03:34.000000000 -0400 *************** *** 3496,3501 **** --- 3496,3502 ---- { if(f77_variable_format || f90_variable_format) nonstandard($1.line_num,$1.col_num,f90_variable_format,0); + msg_tail(": variable format"); } ;