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:

Reply via email to