Le 13/04/2013 17:44, Mikael Morin a écrit : > Indeed, that's invalid: > And then, the call to gfc_match_varspec shouldn't be there in the first place. I'll test the following later.
Index: primary.c =================================================================== --- primary.c (révision 197949) +++ primary.c (copie de travail) @@ -1954,11 +1954,10 @@ gfc_match_varspec (gfc_expr *primary, int equiv_fl gcc_assert (!tail || !tail->next); - if (!(primary->expr_type == EXPR_VARIABLE - || (primary->expr_type == EXPR_STRUCTURE - && primary->symtree && primary->symtree->n.sym - && primary->symtree->n.sym->attr.flavor))) - return MATCH_ERROR; + gcc_assert (primary->expr_type == EXPR_VARIABLE + || (primary->expr_type == EXPR_STRUCTURE + && primary->symtree && primary->symtree->n.sym + && primary->symtree->n.sym->attr.flavor)); if (tbp->n.tb->is_generic) tbp_sym = NULL; @@ -3102,18 +3101,8 @@ gfc_match_rvalue (gfc_expr **result) gfc_error ("Missing argument list in function '%s' at %C", sym->name); if (m != MATCH_YES) - { - m = MATCH_ERROR; - break; - } + m = MATCH_ERROR; - /* If our new function returns a character, array or structure - type, it might have subsequent references. */ - - m = gfc_match_varspec (e, 0, false, true); - if (m == MATCH_NO) - m = MATCH_YES; - break; generic_function: